Почему лучше вызывать класс ResourceManager, а не загружать ресурсы напрямую по имени?

Я работал над локализацией большого проекта, и я делал это, создавая большой файл ресурсов вручную и вызывая каждую строку по имени в коде. Вместо вызова ResourceManager и использования GetString (для диалоговых окон и т. д.) я просто заменял каждую строку на Resources.ClassName_MethodName_StringName.

У меня есть ощущение, что я должен использовать ResourceManager, но я хочу понять, почему это лучше, прежде чем я изменю весь свой код, чтобы использовать его.


person terrafv    schedule 24.01.2013    source источник
comment
Нет, вы должны использовать Properties.Resources.NameOfStringResource. Ты делаешь это правильно. Вот почему Resources.Designer.cs создан для вас.   -  person Matthew Watson    schedule 24.01.2013
comment
например, в Razor ресурсы строго типизированы. То есть вы можете использовать RessourceName.StringName вместо RessourManager.GetString(StringName). Интелисенс вам в помощь.   -  person tschmit007    schedule 24.01.2013
comment
Что ж, приятно знать, что мне не нужно возвращаться и что-то менять. MSDN говорит, что нужно вызывать ResourceManager для всего, поэтому я подумал, что делаю это неправильно.   -  person terrafv    schedule 24.01.2013


Ответы (2)


Что ж, нет причин использовать ResourceManager напрямую (будут применяться некоторые исключения), потому что, если вы используете сгенерированный код из resx-файлов, все, что он делает, это следующее:

public static string MyResourceName {
    get {
        return ResourceManager.GetString("MyResourceName", resourceCulture);
    }
}

Это здорово, поскольку вы получаете бесплатную проверку имен ресурсов во время компиляции!

person TGlatzer    schedule 24.01.2013

http://www.c-sharpcorner.com/uploadfile/prvn_131971/chapter-i-resources-and-localization/

Внутри сгенерированный класс использует экземпляр класса ResourceManager, который определен в пространстве имен System.Resources. Экземпляр этого класса доступен через свойство ResourceManager сгенерированного класса. Внутренне процедуры свойств для доступа к внедренным ресурсам сами по себе являются просто оболочками для вызовов одного из методов GetXxx (то есть GetString или GetStream) этого экземпляра ResourceManager. Например, доступный ресурс через сгенерированную процедуру свойств Resources.MyResourceStrings.

Таким образом, вызывая ресурсы напрямую по имени, вы все равно используете метод YourResources.ResourceManager.GetString().

person Arie    schedule 24.01.2013
comment
Это все еще работает, если вы переключите поставщика ресурсов, например, на DB ResourceProvider? - person Remy; 24.01.2013