ResourceManager Конструкторы

Определение

Инициализирует новый экземпляр класса ResourceManager.

Перегрузки

Имя Описание
ResourceManager()

Инициализирует новый экземпляр ResourceManager класса со значениями по умолчанию.

ResourceManager(Type)

Инициализирует новый экземпляр ResourceManager класса, который ищет ресурсы в вспомогательных сборках на основе сведений из указанного объекта типа.

ResourceManager(String, Assembly)

Инициализирует новый экземпляр ResourceManager класса, который ищет ресурсы, содержащиеся в файлах с указанным корневым именем в данной сборке.

ResourceManager(String, Assembly, Type)

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

ResourceManager()

Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs

Инициализирует новый экземпляр ResourceManager класса со значениями по умолчанию.

protected:
 ResourceManager();
protected ResourceManager();
Protected Sub New ()

Комментарии

Этот конструктор полезен, только если вы пишете собственный класс, производный ResourceManager от класса.

Применяется к

ResourceManager(Type)

Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs

Инициализирует новый экземпляр ResourceManager класса, который ищет ресурсы в вспомогательных сборках на основе сведений из указанного объекта типа.

public:
 ResourceManager(Type ^ resourceSource);
public ResourceManager(Type resourceSource);
new System.Resources.ResourceManager : Type -> System.Resources.ResourceManager
Public Sub New (resourceSource As Type)

Параметры

resourceSource
Type

Тип, из которого диспетчер ресурсов получает все сведения для поиска файлов ресурсов.

Исключения

Параметр resourceSource имеет значение null.

Комментарии

Настольные приложения

В классических приложениях диспетчер ресурсов использует resourceSource параметр для загрузки определенного файла ресурсов следующим образом:

  • Если атрибут NeutralResourcesLanguageAttribute не используется для указания, что ресурсы культуры по умолчанию находятся в вспомогательной сборке, диспетчер ресурсов предполагает, что файл ресурсов для культуры по умолчанию найден в той же сборке, что и тип, указанный параметром resourceSource.
  • Диспетчер ресурсов предполагает, что файл ресурсов по умолчанию имеет то же базовое имя, что и тип, указанный параметром resourceSource .
  • Диспетчер ресурсов использует класс по умолчанию ResourceSet для управления файлом ресурсов.

Например, при указании типа MyCompany.MyProduct.MyTypeдиспетчер ресурсов ищет файл ресурсовс именем MyCompany.MyProduct.MyType.resources в сборке, которая определяет MyType.

В Visual Studio дизайнер ресурсов автоматически генерирует код, который определяет класс internal (в C#) или Friend (в Visual Basic), имя которого совпадает с базовым именем файла .resources для культуры по умолчанию. Это позволяет создать экземпляр ResourceManager объекта и присвоить ему определенный набор ресурсов, получив объект типа, имя которого соответствует имени ресурса, так как до тех пор, пока класс отображается компилятору, ресурсы также должны быть. Например, если файл .resources назван Resource1, следующий оператор создаёт объект ResourceManager для управления файлом .resources, названным Resource1.

ResourceManager rm = new ResourceManager(typeof(Resource1));

Если вы не используете Visual Studio, можно создать класс без членов, пространство имен и имя которого совпадают с именем и пространством имен файла ресурсов по умолчанию .resources. Пример содержит иллюстрацию.

Example

В следующем примере используется конструктор ResourceManager(Type) для создания объекта ResourceManager. Он состоит из ресурсов, скомпилированных из .txt файлов для английского языка (en), французского (Франция) (fr-FR) и российских (Россия) (ru-RU) культур. Пример изменяет текущую культуру и текущие культурные параметры пользовательского интерфейса на английский (США), французский (Франция), русский (Россия) и шведский (Швеция). Затем он вызывает GetString(String) метод для получения локализованной строки, которая отображает приветствие, которое зависит от времени дня.

В примере требуется три текстовых файла ресурсов, как указано в следующей таблице. Каждый файл содержит строковые ресурсы с именем Morning, Afternoonи Evening.

Культура Имя файла Имя ресурса Значение ресурса
en-US GreetingResources.txt Morning Доброе утро
en-US GreetingResources.txt Afternoon Добрый день
en-US GreetingResources.txt Evening Добрый вечер
fr-FR GreetingResources.fr-FR.txt Morning Bonjour
fr-FR GreetingResources.fr-FR.txt Afternoon Bonjour
fr-FR GreetingResources.fr-FR.txt Evening Добрый вечер
ru-RU GreetingResources.ru-RU.txt Morning Доброе утро
ru-RU GreetingResources.ru-RU.txt Afternoon Добрый день
ru-RU GreetingResources.ru-RU.txt Evening Добрый вечер

Для компиляции примера Visual Basic и создания исполняемого файла с именем Greet.exeможно использовать следующий пакетный файл. Чтобы скомпилировать с помощью C#, измените имя компилятора с vbc на csc, а расширение файла с .vb на .cs.

resgen GreetingResources.txt
vbc Greet.vb /resource: GreetingResources.resources

md fr-FR
resgen GreetingResources.fr-FR.txt
al /out:fr-FR\Greet.resources.dll /culture:fr-FR /embed: GreetingResources.fr-FR.resources

md ru-RU
resgen GreetingResources.ru-RU.txt
al /out:ru-RU\Greet.resources.dll /culture:ru-RU /embed: GreetingResources.ru-RU.resources

Ниже приведен исходный код для примера (ShowDate.vb для версии Visual Basic или ShowDate.cs для версии C# кода).

using System;
using System.Resources;
using System.Globalization;
using System.Threading;

[assembly: NeutralResourcesLanguage("en")]

public class Example2
{
    public static void Main()
    {
        string[] cultureNames = [ "en-US", "fr-FR", "ru-RU", "sv-SE" ];
        DateTime noon = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
                                     DateTime.Now.Day, 12, 0, 0);
        DateTime evening = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
                                        DateTime.Now.Day, 18, 0, 0);

        ResourceManager rm = new ResourceManager(typeof(GreetingResources));

        foreach (var cultureName in cultureNames)
        {
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
            Console.WriteLine($"The current UI culture is {CultureInfo.CurrentUICulture.Name}");
            if (DateTime.Now < noon)
                Console.WriteLine($"{rm.GetString("Morning")}!");
            else if (DateTime.Now < evening)
                Console.WriteLine($"{rm.GetString("Afternoon")}!");
            else
                Console.WriteLine($"{rm.GetString("Evening")}!");
            Console.WriteLine();
        }
    }

    internal class GreetingResources
    {
    }
}
// The example displays output like the following:
//       The current UI culture is en-US
//       Good afternoon!
//
//       The current UI culture is fr-FR
//       Bonjour!
//
//       The current UI culture is ru-RU
//       Добрый день!
//
//       The current UI culture is sv-SE
//       Good afternoon!
Imports System.Resources
Imports System.Globalization
Imports System.Threading

<Assembly:NeutralResourcesLanguage("en")>

Module Example
   Public Sub Main()
      Dim cultureNames() As String = {"en-US", "fr-FR", "ru-RU", "sv-SE" }
      Dim noon As New Date(Date.Now.Year, Date.Now.Month, 
                           Date.Now.Day, 12,0,0)
      Dim evening As New Date(Date.Now.Year, Date.Now.Month,
                              Date.Now.Day, 18, 0, 0)                          
      
      Dim rm As New ResourceManager(GetType(GreetingResources))
      
      For Each cultureName In cultureNames
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName)
         Console.WriteLine("The current UI culture is {0}", 
                           CultureInfo.CurrentUICulture.Name)
         If Date.Now < noon Then
            Console.WriteLine("{0}!", rm.GetString("Morning"))
         ElseIf Date.Now < evening Then
            Console.WriteLine("{0}!", rm.GetString("Afternoon"))
         Else
            Console.WriteLine("{0}!", rm.GetString("Evening"))
         End If 
         Console.WriteLine()
      Next
   End Sub
End Module

Friend Class GreetingResources
End Class
' The example displays output like the following:
'       The current UI culture is en-US
'       Good afternoon!
'       
'       The current UI culture is fr-FR
'       Bonjour!
'       
'       The current UI culture is ru-RU
'       Добрый день!
'       
'       The current UI culture is sv-SE
'       Good afternoon!

Помимо определения класса приложения с именем Example, исходный код определяет внутренний класс, имя которого совпадает GreetingResourcesс базовым именем файлов ресурсов. Это позволяет успешно создать экземпляр ResourceManager объекта путем вызова конструктора ResourceManager(Type) .

Обратите внимание, что выходные данные отображают соответствующую локализованную строку, за исключением случая, когда текущая культура пользовательского интерфейса — шведский (Швеция); в этом случае используются английские языковые ресурсы. Так как ресурсы шведского языка недоступны, приложение использует ресурсы культурных параметров по умолчанию, как это определено атрибутом NeutralResourcesLanguageAttribute.

Применяется к

ResourceManager(String, Assembly)

Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs

Инициализирует новый экземпляр ResourceManager класса, который ищет ресурсы, содержащиеся в файлах с указанным корневым именем в данной сборке.

public:
 ResourceManager(System::String ^ baseName, System::Reflection::Assembly ^ assembly);
public ResourceManager(string baseName, System.Reflection.Assembly assembly);
new System.Resources.ResourceManager : string * System.Reflection.Assembly -> System.Resources.ResourceManager
Public Sub New (baseName As String, assembly As Assembly)

Параметры

baseName
String

Корневое имя файла ресурса без его расширения, но включая любое полное имя пространства имен. Например, корневое имя файла ресурса с именем MyApplication.MyResource.en-US.resources — MyApplication.MyResource.

assembly
Assembly

Основная сборка ресурсов.

Исключения

Значение baseName или assembly параметр null.

Комментарии

Настольные приложения

В настольных приложениях файлы ресурсов конкретной культуры должны содержаться во вспомогательных сборках, а файл ресурсов культуры по умолчанию — в основной сборке. Предполагается, что спутниковая сборка содержит ресурсы для одной культуры, указанной в манифесте этой сборки, и загружается по мере необходимости.

Note

Чтобы получить ресурсы из файлов ресурсов напрямую, а не извлекать их из сборок, необходимо вызвать CreateFileBasedResourceManager метод вместо создания экземпляра ResourceManager объекта.

Если файл ресурсов, идентифицированный baseName, не найден в assembly, метод создает экземпляр объекта ResourceManager, но попытка получить определенный ресурс вызывает исключение, обычно MissingManifestResourceException. Для получения информации о диагностике причины исключения см. раздел "Обработка исключения MissingManifestResourceException" в теме класса ResourceManager.

Example

В следующем примере используется простое не локализованное приложение Hello World для иллюстрации конструктора ResourceManager(String, Assembly) . Содержимое текстового файла с именем ExampleResources.txtGreeting=Hello. При компиляции приложения ресурс внедряется в основную сборку приложения.

Текстовый файл можно преобразовать в двоичный файл ресурсов с помощью генератора файлов ресурсов (ResGen.exe) в командной строке следующим образом:

resgen ExampleResources.txt

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

using System;
using System.Reflection;
using System.Resources;

public class Example1
{
    public static void Main()
    {
        // Retrieve the resource.
        ResourceManager rm = new ResourceManager("ExampleResources",
                                 typeof(Example).Assembly);
        string greeting = rm.GetString("Greeting");

        Console.Write("Enter your name: ");
        string name = Console.ReadLine();
        Console.WriteLine($"{greeting} {name}!");
    }
}
// The example produces output similar to the following:
//       Enter your name: John
//       Hello John!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources

Module Example1
    Public Sub Main()
        ' Retrieve the resource.
        Dim rm As New ResourceManager("ExampleResources",
                                      GetType(Example).Assembly)
        Dim greeting As String = rm.GetString("Greeting")

        Console.Write("Enter your name: ")
        Dim name As String = Console.ReadLine()
        Console.WriteLine("{0} {1}!", greeting, name)
    End Sub
End Module
' The example produces output similar to the following:
'       Enter your name: John
'       Hello John!

Его можно скомпилировать с помощью следующей команды в C#:

csc Example.cs /resource:ExampleResources.resources

В примере извлекается ссылка на сборку, содержащую файл ресурсов, путем передачи типа, определенного в этой сборке, функции typeof (в C#) или функции GetType (в Visual Basic) и извлечения значения свойства Type.Assembly.

Примечания для тех, кто наследует этот метод

Этот конструктор использует реализацию, предоставляемую ResourceSet системой. Чтобы использовать пользовательский формат файла ресурсов, следует наследовать от ResourceSet класса, переопределить GetDefaultReader() методы и GetDefaultWriter() передать этот тип конструктору ResourceManager(String, Assembly, Type) . Использование пользовательского ResourceSet может быть полезно для управления политикой кэширования ресурсов или поддержкой собственного формата файла ресурсов, но обычно не требуется.

Применяется к

ResourceManager(String, Assembly, Type)

Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs
Исходный код:
ResourceManager.cs

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

public:
 ResourceManager(System::String ^ baseName, System::Reflection::Assembly ^ assembly, Type ^ usingResourceSet);
public ResourceManager(string baseName, System.Reflection.Assembly assembly, Type? usingResourceSet);
public ResourceManager(string baseName, System.Reflection.Assembly assembly, Type usingResourceSet);
new System.Resources.ResourceManager : string * System.Reflection.Assembly * Type -> System.Resources.ResourceManager
Public Sub New (baseName As String, assembly As Assembly, usingResourceSet As Type)

Параметры

baseName
String

Корневое имя файла ресурса без его расширения, но включая любое полное имя пространства имен. Например, корневое имя файла ресурса с именем MyApplication.MyResource.en-US.resources — MyApplication.MyResource.

assembly
Assembly

Основная сборка ресурсов.

usingResourceSet
Type

Тип используемого пользовательского ResourceSet . Если nullиспользуется объект среды выполнения ResourceSet по умолчанию.

Исключения

usingResourceSet не является производным классом ResourceSet.

Значение baseName или assembly параметр null.

Комментарии

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

Note

Чтобы получить ресурсы из файлов ресурсов напрямую, а не извлекать их из сборок, необходимо вызвать CreateFileBasedResourceManager метод вместо создания экземпляра ResourceManager объекта.

Если файл ресурсов, идентифицированный baseName, не найден в assembly, метод создает экземпляр объекта ResourceManager, но попытка получить определенный ресурс вызывает исключение, обычно MissingManifestResourceException. Для получения информации о диагностике причины исключения см. раздел "Обработка исключения MissingManifestResourceException" в теме класса ResourceManager.

Note

Этот usingResourceSet параметр используется для поддержки собственного формата ресурсов и обычно будет использоваться null. Это отличается от конструктора, который принимает Type только.

Примечания для тех, кто вызывает этот метод

Этот конструктор позволяет указать реализацию ResourceSet . Если вы не хотите определенную ResourceSet реализацию, но хотите использовать пользовательский формат файла ресурсов, следует наследовать от ResourceSet класса, переопределить GetDefaultReader() методы и GetDefaultWriter() передать этот тип в этот конструктор.

Применяется к