ResourceManager Konstruktory

Definicja

Inicjuje nowe wystąpienie klasy ResourceManager.

Przeciążenia

Nazwa Opis
ResourceManager()

Inicjuje ResourceManager nowe wystąpienie klasy z wartościami domyślnymi.

ResourceManager(Type)

Inicjuje ResourceManager nowe wystąpienie klasy, która wyszukuje zasoby w zestawach satelitarnych na podstawie informacji z określonego obiektu typu.

ResourceManager(String, Assembly)

Inicjuje nowe wystąpienie ResourceManager klasy, która wyszukuje zasoby zawarte w plikach o określonej nazwie głównej w danym zestawie.

ResourceManager(String, Assembly, Type)

Inicjuje nowe wystąpienie ResourceManager klasy używającej określonej ResourceSet klasy do wyszukiwania zasobów zawartych w plikach o określonej nazwie głównej w danym zestawie.

ResourceManager()

Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs

Inicjuje ResourceManager nowe wystąpienie klasy z wartościami domyślnymi.

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

Uwagi

Ten konstruktor jest przydatny tylko wtedy, gdy napiszesz własną klasę, która pochodzi z ResourceManager klasy .

Dotyczy

ResourceManager(Type)

Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs

Inicjuje ResourceManager nowe wystąpienie klasy, która wyszukuje zasoby w zestawach satelitarnych na podstawie informacji z określonego obiektu typu.

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

Parametry

resourceSource
Type

Typ, z którego menedżer zasobów uzyskuje wszystkie informacje dotyczące znajdowania plików resources.

Wyjątki

Parametr resourceSource jest null.

Uwagi

Aplikacje desktopowe

W aplikacjach klasycznych menedżer zasobów używa parametru resourceSource do załadowania określonego pliku zasobu w następujący sposób:

  • NeutralResourcesLanguageAttribute Jeśli atrybut nie jest używany do wskazania, że zasoby kultury domyślnej znajdują się w zestawie satelitarnym, menedżer zasobów zakłada, że plik zasobu dla kultury domyślnej znajduje się w tym samym zestawie co typ określony przez resourceSource parametr .
  • Menedżer zasobów zakłada, że domyślny plik zasobu ma taką samą nazwę podstawową, jak typ określony przez resourceSource parametr.
  • Menedżer zasobów używa domyślnej ResourceSet klasy do manipulowania plikiem zasobów.

Na przykład, biorąc pod uwagę typ o nazwie MyCompany.MyProduct.MyType, menedżer zasobów szuka pliku resources o nazwie MyCompany.MyProduct.MyType.resources w zestawie, który definiuje MyType.

W programie Visual Studio projektant zasobów automatycznie generuje kod, który definiuje klasę internal (w języku C#) lub Friend (w Visual Basic), której nazwa jest taka sama jak nazwa podstawowa pliku resources dla kultury domyślnej. Dzięki temu można utworzyć wystąpienie ResourceManager obiektu i połączyć go z określonym zestawem zasobów, uzyskując obiekt typu, którego nazwa odpowiada nazwie zasobu, ponieważ tak długo, jak klasa jest widoczna dla kompilatora, zasoby muszą być również. Jeśli na przykład plik resources ma nazwę Resource1, następująca instrukcja tworzy wystąpienie obiektu w celu zarządzania plikiem ResourceManagerresources o nazwie Resource1:

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

Jeśli nie używasz programu Visual Studio, możesz utworzyć klasę bez elementów członkowskich, których przestrzeń nazw i nazwa są takie same jak w domyślnym pliku resources . Przykład zawiera ilustrację.

Przykład

W poniższym przykładzie użyto konstruktora ResourceManager(Type) do utworzenia ResourceManager wystąpienia obiektu. Składa się z zasobów skompilowanych z plików .txt dla kultury angielskiej (en), francuskiej (Francja) (fr-FR) i rosyjskiej (Rosja) (ru-RU). Przykład zmienia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na angielski (Stany Zjednoczone), francuski (Francja), rosyjski (Rosja) i szwedzki (Szwecja). Następnie wywołuje metodę GetString(String) , aby pobrać zlokalizowany ciąg, który wyświetla powitanie, które zależy od pory dnia.

Przykład wymaga trzech plików zasobów opartych na tekście, jak pokazano w poniższej tabeli. Każdy plik zawiera zasoby ciągów o nazwach Morning, Afternooni Evening.

Kultura Nazwa pliku Nazwa zasobu Wartość zasobu
en-US GreetingResources.txt Morning Dzień dobry
en-US GreetingResources.txt Afternoon Dzień dobry
en-US GreetingResources.txt Evening Dobry wieczór
fr-FR GreetingResources.fr-FR.txt Morning Bonjour
fr-FR GreetingResources.fr-FR.txt Afternoon Bonjour
fr-FR GreetingResources.fr-FR.txt Evening Bonsoir
ru-RU GreetingResources.ru-RU.txt Morning Доброе утро
ru-RU GreetingResources.ru-RU.txt Afternoon Добрый день
ru-RU GreetingResources.ru-RU.txt Evening Добрый вечер

Poniższy plik wsadowy umożliwia skompilowanie przykładu języka Visual Basic i utworzenie pliku wykonywalnego o nazwie Greet.exe. Aby skompilować w języku C#, zmień nazwę kompilatora z vbc na csc i rozszerzenie pliku z .vb na .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

Oto kod źródłowy dla przykładu (ShowDate.vb dla wersji Visual Basic lub ShowDate.cs dla wersji języka C# kodu).

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!

Oprócz definiowania klasy aplikacji o nazwie Example, kod źródłowy definiuje klasę wewnętrzną, której nazwa, GreetingResources, jest taka sama jak nazwa podstawowa plików zasobów. Dzięki temu można pomyślnie utworzyć ResourceManager instancję przez wywołanie konstruktora ResourceManager(Type).

Zwróć uwagę, że dane wyjściowe wyświetlają odpowiedni zlokalizowany ciąg, z wyjątkiem sytuacji, gdy bieżąca kultura interfejsu użytkownika to Szwecja, wtedy używa angielskich zasobów językowych. Ponieważ zasoby języka szwedzkiego są niedostępne, zamiast tego aplikacja używa zasobów kultury domyślnej, zgodnie z definicją atrybutu NeutralResourcesLanguageAttribute .

Dotyczy

ResourceManager(String, Assembly)

Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs

Inicjuje nowe wystąpienie ResourceManager klasy, która wyszukuje zasoby zawarte w plikach o określonej nazwie głównej w danym zestawie.

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)

Parametry

baseName
String

Nazwa główna pliku zasobu bez jego rozszerzenia, ale w tym dowolna w pełni kwalifikowana nazwa przestrzeni nazw. Na przykład nazwa główna pliku zasobu o nazwie MyApplication.MyResource.en-US.resources to MyApplication.MyResource.

assembly
Assembly

Główny zestaw zasobów.

Wyjątki

Parametr baseName or assembly to null.

Uwagi

Aplikacje desktopowe

W aplikacjach klasycznych poszczególne pliki zasobów specyficzne dla kultury powinny znajdować się w zestawach satelitarnych, a plik zasobu kultury domyślnej powinien znajdować się w głównym zestawie. Zakłada się, że zestaw satelitarny zawiera zasoby dla pojedynczej kultury określonej w manifeście tego zestawu i jest ładowany w razie potrzeby.

Note

Aby pobrać zasoby bezpośrednio z plików resources zamiast pobierać je z zestawów, należy wywołać metodę CreateFileBasedResourceManager i utworzyć obiekt ResourceManager.

Jeśli pliku zasobu zidentyfikowanego przez baseName nie można znaleźć w assembly, metoda instancjuje obiekt ResourceManager, ale próba pobrania określonego zasobu rzuca wyjątek, zazwyczaj MissingManifestResourceException. Aby uzyskać informacje na temat diagnozowania przyczyny wyjątku, zobacz sekcję "Obsługa wyjątku MissingManifestResourceException" tematu ResourceManager klasy.

Przykład

W poniższym przykładzie użyto prostej, nielokalizowanej aplikacji "Hello world" w celu zilustrowania konstruktora ResourceManager(String, Assembly) . Zawartość pliku tekstowego o nazwie ExampleResources.txt to Greeting=Hello. Po skompilowaniu aplikacji zasób jest osadzony w głównym zestawie aplikacji.

Plik tekstowy można przekonwertować na plik zasobu binarnego przy użyciu generatora plików zasobów (ResGen.exe) w wierszu polecenia w następujący sposób:

resgen ExampleResources.txt

Poniższy przykład zawiera kod wykonywalny, który tworzy wystąpienie ResourceManager obiektu, monituje użytkownika o wprowadzenie nazwy i wyświetla powitanie.

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!

Można go skompilować przy użyciu następującego polecenia w języku C#:

csc Example.cs /resource:ExampleResources.resources

Przykład pobiera odwołanie do zestawu zawierającego plik zasobu, przekazując typ zdefiniowany w tym zestawie do typeof funkcji (w języku C#) lub GetType funkcji (w Visual Basic) i pobierając wartość jej Type.Assembly właściwości.

Notatki dotyczące dziedziczenia

Ten konstruktor używa implementacji dostarczonej ResourceSet przez system. Aby użyć niestandardowego formatu pliku zasobów, należy utworzyć z ResourceSet klasy, zastąpić GetDefaultReader() metody i GetDefaultWriter() i przekazać ten typ do konstruktora ResourceManager(String, Assembly, Type) . Użycie niestandardowego ResourceSet może być przydatne do kontrolowania zasad buforowania zasobów lub obsługi własnego formatu pliku zasobów, ale zazwyczaj nie jest to konieczne.

Dotyczy

ResourceManager(String, Assembly, Type)

Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs
Źródło:
ResourceManager.cs

Inicjuje nowe wystąpienie ResourceManager klasy używającej określonej ResourceSet klasy do wyszukiwania zasobów zawartych w plikach o określonej nazwie głównej w danym zestawie.

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)

Parametry

baseName
String

Nazwa główna pliku zasobu bez jego rozszerzenia, ale w tym dowolna w pełni kwalifikowana nazwa przestrzeni nazw. Na przykład nazwa główna pliku zasobu o nazwie MyApplication.MyResource.en-US.resources to MyApplication.MyResource.

assembly
Assembly

Główny zestaw zasobów.

usingResourceSet
Type

Typ niestandardowego ResourceSet do użycia. Jeśli nulljest używany domyślny obiekt środowiska uruchomieniowego ResourceSet .

Wyjątki

usingResourceSet nie jest klasą pochodną klasy ResourceSet.

Parametr baseName or assembly to null.

Uwagi

Poszczególne pliki zasobów specyficzne dla kultury powinny znajdować się w zestawach satelitarnych, a domyślny plik zasobu kultury powinien znajdować się w głównym zestawie. Zakłada się, że zestaw satelitarny zawiera zasoby dla pojedynczej kultury określonej w manifeście tego zestawu i jest ładowany w razie potrzeby.

Note

Aby pobrać zasoby z plików resources bezpośrednio zamiast pobierać je z zestawów, należy wywołać CreateFileBasedResourceManager metodę , aby utworzyć ResourceManager wystąpienie obiektu.

Jeśli pliku zasobu zidentyfikowanego przez baseName nie można znaleźć w assembly, metoda instancjuje obiekt ResourceManager, ale próba pobrania określonego zasobu rzuca wyjątek, zazwyczaj MissingManifestResourceException. Aby uzyskać informacje na temat diagnozowania przyczyny wyjątku, zobacz sekcję "Obsługa wyjątku MissingManifestResourceException" tematu ResourceManager klasy.

Note

Parametr usingResourceSet jest używany do obsługi własnego formatu zasobów i często będzie to null. Różni się to od konstruktora Type , który przyjmuje tylko wartość .

Notatki dotyczące wywoływania

Ten konstruktor umożliwia określenie implementacji ResourceSet . Jeśli nie chcesz określonej ResourceSet implementacji, ale chcesz użyć niestandardowego formatu pliku zasobów, należy utworzyć z ResourceSet klasy, zastąpić GetDefaultReader() metody i GetDefaultWriter() i przekazać ten typ do tego konstruktora.

Dotyczy