ResourceManager Konstruktory
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
resourceSourceparametr . - Menedżer zasobów zakłada, że domyślny plik zasobu ma taką samą nazwę podstawową, jak typ określony przez
resourceSourceparametr. - 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.