ResourceManager Konstruktoren
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Initialisiert eine neue Instanz der ResourceManager-Klasse.
Überlädt
| Name | Beschreibung |
|---|---|
| ResourceManager() |
Initialisiert eine neue Instanz der ResourceManager Klasse mit Standardwerten. |
| ResourceManager(Type) |
Initialisiert eine neue Instanz der ResourceManager Klasse, die Ressourcen in Satellitenassemblys basierend auf Informationen aus dem angegebenen Typobjekt nachsieht. |
| ResourceManager(String, Assembly) |
Initialisiert eine neue Instanz der ResourceManager Klasse, die Ressourcen in Dateien mit dem angegebenen Stammnamen in der angegebenen Assembly nachsieht. |
| ResourceManager(String, Assembly, Type) |
Initialisiert eine neue Instanz der Klasse, die ResourceManager eine angegebene ResourceSet Klasse verwendet, um Ressourcen in Dateien mit dem angegebenen Stammnamen in der angegebenen Assembly nachzuschlagen. |
ResourceManager()
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
Initialisiert eine neue Instanz der ResourceManager Klasse mit Standardwerten.
protected:
ResourceManager();
protected ResourceManager();
Protected Sub New ()
Hinweise
Dieser Konstruktor ist nur hilfreich, wenn Sie eine eigene Klasse schreiben, die von der ResourceManager Klasse abgeleitet wird.
Gilt für:
ResourceManager(Type)
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
Initialisiert eine neue Instanz der ResourceManager Klasse, die Ressourcen in Satellitenassemblys basierend auf Informationen aus dem angegebenen Typobjekt nachsieht.
public:
ResourceManager(Type ^ resourceSource);
public ResourceManager(Type resourceSource);
new System.Resources.ResourceManager : Type -> System.Resources.ResourceManager
Public Sub New (resourceSource As Type)
Parameter
- resourceSource
- Type
Ein Typ, von dem der Ressourcenmanager alle Informationen zum Suchen von RESSOURCENdateien ableiten kann.
Ausnahmen
Der resourceSource Parameter ist null.
Hinweise
Desktopanwendungen
In Desktop-Apps verwendet der Ressourcen-Manager den resourceSource Parameter, um eine bestimmte Ressourcendatei wie folgt zu laden:
- Wenn das NeutralResourcesLanguageAttribute Attribut nicht verwendet wird, um anzugeben, dass sich die Ressourcen der Standardkultur in einer Satellitenassembly befinden, geht der Ressourcenmanager davon aus, dass die Ressourcendatei für die Standardkultur in derselben Assembly gefunden wird wie der vom
resourceSourceParameter angegebene Typ. - Der Ressourcenmanager geht davon aus, dass die Standardressourcendatei denselben Basisnamen wie der vom
resourceSourceParameter angegebene Typ aufweist. - Der Ressourcen-Manager verwendet die Standardklasse ResourceSet , um die Ressourcendatei zu bearbeiten.
Bei einem Typ mit dem Namen MyCompany.MyProduct.MyType sucht der Ressourcenmanager beispielsweise nach einer .resources-Datei mit dem Namen MyCompany.MyProduct.MyType.resources in der Assembly, die MyType definiert.
In Visual Studio generiert der Ressourcen-Designer automatisch Code, der eine internal (in C#) oder Friend (in Visual Basic) Klasse definiert, deren Name dem Basisnamen der RESSOURCEN-Datei für die Standardkultur entspricht. Dadurch ist es möglich, ein ResourceManager-Objekt zu instanziieren und es mit einem bestimmten Satz von Ressourcen zu verknüpfen, indem man ein Typobjekt erhält, dessen Name dem Namen der Ressource entspricht, denn solange die Klasse für den Compiler sichtbar ist, müssen es auch die Ressourcen sein. Wenn beispielsweise eine RESSOURCEN-Datei den Namen "Resource1" hat, instanziiert die folgende Anweisung ein ResourceManager Objekt zum Verwalten der RESSOURCEN-Datei mit dem Namen Resource1:
ResourceManager rm = new ResourceManager(typeof(Resource1));
Wenn Sie Visual Studio nicht verwenden, können Sie eine Klasse ohne Member erstellen, deren Namespace und Name mit der der Standardressourcendatei identisch sind. Das Beispiel stellt eine Abbildung bereit.
Example
Im folgenden Beispiel wird der ResourceManager(Type) Konstruktor verwendet, um ein ResourceManager Objekt zu instanziieren. Es besteht aus Ressourcen, die aus .txt Dateien für die Kulturen Englisch (en), Französisch (Frankreich) (fr-FR) und Russisch (Russland) (ru-RU) kompiliert wurden. Das Beispiel ändert die aktuelle Kultur und die aktuelle Kultur der Benutzeroberfläche in Englisch (Vereinigte Staaten), Französisch (Frankreich), Russisch (Russland) und Schwedisch (Schweden). Anschließend wird die GetString(String) Methode aufgerufen, um die lokalisierte Zeichenfolge abzurufen, die eine Begrüßung anzeigt, die von der Tageszeit abhängt.
Für das Beispiel sind drei textbasierte Ressourcendateien erforderlich, wie in der folgenden Tabelle aufgeführt. Jede Datei enthält Zeichenfolgenressourcen namens Morning, , Afternoonund Evening.
| Kultur | Dateiname | Ressourcenname | Ressourcenwert |
|---|---|---|---|
| en-US | GreetingResources.txt | Morning |
Guten Morgen |
| en-US | GreetingResources.txt | Afternoon |
Guten Tag |
| en-US | GreetingResources.txt | Evening |
Guten Abend |
| 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 |
Добрый вечер |
Sie können die folgende Batchdatei verwenden, um das Visual Basic-Beispiel zu kompilieren und eine ausführbare Datei mit dem Namen Greet.exezu erstellen. Um mit C# zu kompilieren, ändern Sie den Compilernamen von vbc zu csc und die Dateierweiterung von .vb zu .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
Hier sehen Sie den Quellcode für das Beispiel (ShowDate.vb für die Visual Basic-Version oder ShowDate.cs für die C#-Version des Codes).
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!
Neben der Definition einer App-Klasse mit dem Namen Exampledefiniert der Quellcode eine interne Klasse, deren Name, deren GreetingResourcesName mit dem Basisnamen der Ressourcendateien übereinstimmt. Dadurch kann ein ResourceManager Objekt erfolgreich instanziiert werden, indem der ResourceManager(Type) Konstruktor aufgerufen wird.
Beachten Sie, dass in der Ausgabe die entsprechende lokalisierte Zeichenfolge angezeigt wird, außer wenn die aktuelle UI-Kultur Schwedisch (Schweden) ist, in diesem Fall werden englischsprachige Ressourcen verwendet. Da schwedische Sprachressourcen nicht verfügbar sind, verwendet die App stattdessen die Ressourcen der Standardkultur, wie durch das NeutralResourcesLanguageAttribute Attribut definiert.
Gilt für:
ResourceManager(String, Assembly)
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
Initialisiert eine neue Instanz der ResourceManager Klasse, die Ressourcen in Dateien mit dem angegebenen Stammnamen in der angegebenen Assembly nachsieht.
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)
Parameter
- baseName
- String
Der Stammname der Ressourcendatei ohne die Erweiterung, aber einschließlich eines vollqualifizierten Namespacenamens. Der Stammname für die Ressourcendatei mit dem Namen "MyApplication.MyResource".en-US.resources ist "MyApplication.MyResource".
- assembly
- Assembly
Die Hauptassembly für die Ressourcen.
Ausnahmen
Der baseName Parameter ist assemblynull.
Hinweise
Desktopanwendungen
In Desktop-Apps sollten die einzelnen kulturspezifischen Ressourcendateien in Satellitenassemblys enthalten sein, und die Ressourcendatei der Standardkultur sollte in der Hauptassembly enthalten sein. Es wird davon ausgegangen, dass eine Satellitenassembly Ressourcen für eine einzelne Kultur enthält, die im Manifest dieser Assembly angegeben ist, und wird bei Bedarf geladen.
Note
Um Ressourcen aus RESSOURCENdateien direkt abzurufen, anstatt sie aus Assemblys abzurufen, müssen Sie stattdessen die CreateFileBasedResourceManager Methode aufrufen, um ein ResourceManager Objekt zu instanziieren.
Wenn die von der Methode identifizierte baseName Ressourcendatei nicht assemblygefunden werden kann, instanziiert die Methode ein ResourceManager Objekt, aber der Versuch, eine bestimmte Ressource abzurufen, löst in der Regel MissingManifestResourceExceptioneine Ausnahme aus. Informationen zur Diagnose der Ursache der Ausnahme finden Sie im Abschnitt "Umgang mit der MissingManifestResourceException-Ausnahme" der Klassendokumentation von ResourceManager.
Example
Im folgenden Beispiel wird eine einfache, nicht lokalisierte "Hallo Welt"-App verwendet, um den ResourceManager(String, Assembly) Konstruktor zu veranschaulichen. Der Inhalt einer Textdatei mit dem Namen ExampleResources.txt lautet Greeting=Hello. Wenn die App kompiliert wird, wird die Ressource in die Hauptassembly der App eingebettet.
Die Textdatei kann mithilfe des Ressourcen-Generators (ResGen.exe) an der Eingabeaufforderung wie folgt in eine binärressourcendatei konvertiert werden:
resgen ExampleResources.txt
Das folgende Beispiel stellt den ausführbaren Code bereit, der ein ResourceManager Objekt instanziiert, den Benutzer auffordert, einen Namen einzugeben, und zeigt eine Begrüßung an.
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!
Sie kann mithilfe des folgenden Befehls in C# kompiliert werden:
csc Example.cs /resource:ExampleResources.resources
Im Beispiel wird ein Verweis auf die Assembly abgerufen, die die Ressourcendatei enthält, indem ein in dieser Assembly definierter Typ an die typeof Funktion (in C#) oder die GetType Funktion (in Visual Basic) übergeben und der Wert seiner Type.Assembly Eigenschaft abgerufen wird.
Hinweise für Vererber
Dieser Konstruktor verwendet die vom System bereitgestellte ResourceSet Implementierung. Um ein benutzerdefiniertes Ressourcendateiformat zu verwenden, sollten Sie von der ResourceSet Klasse abgeleitet, die GetDefaultReader() Methoden GetDefaultWriter() überschreiben und diesen Typ an den ResourceManager(String, Assembly, Type) Konstruktor übergeben. Die Verwendung einer benutzerdefinierten Methode ResourceSet kann hilfreich sein, um die Richtlinie zum Zwischenspeichern von Ressourcen zu steuern oder ihr eigenes Ressourcendateiformat zu unterstützen, ist jedoch im Allgemeinen nicht erforderlich.
Gilt für:
ResourceManager(String, Assembly, Type)
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
- Quelle:
- ResourceManager.cs
Initialisiert eine neue Instanz der Klasse, die ResourceManager eine angegebene ResourceSet Klasse verwendet, um Ressourcen in Dateien mit dem angegebenen Stammnamen in der angegebenen Assembly nachzuschlagen.
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)
Parameter
- baseName
- String
Der Stammname der Ressourcendatei ohne die Erweiterung, aber einschließlich eines vollqualifizierten Namespacenamens. Der Stammname für die Ressourcendatei mit dem Namen "MyApplication.MyResource".en-US.resources ist "MyApplication.MyResource".
- assembly
- Assembly
Die Hauptassembly für die Ressourcen.
- usingResourceSet
- Type
Der Typ des zu verwendenden Benutzerdefinierten ResourceSet . Wenn nulldas Standardlaufzeitobjekt ResourceSet verwendet wird.
Ausnahmen
usingResourceSet ist keine abgeleitete Klasse von ResourceSet.
Der baseName Parameter ist assemblynull.
Hinweise
Die einzelnen kulturspezifischen Ressourcendateien sollten in Satellitenassemblys enthalten sein, und die Ressourcendatei der Standardkultur sollte in der Hauptassembly enthalten sein. Es wird davon ausgegangen, dass eine Satellitenassembly Ressourcen für eine einzelne Kultur enthält, die im Manifest dieser Assembly angegeben ist, und wird bei Bedarf geladen.
Note
Um Ressourcen aus RESSOURCENdateien direkt abzurufen, anstatt sie aus Assemblys abzurufen, müssen Sie stattdessen die CreateFileBasedResourceManager Methode aufrufen, um ein ResourceManager Objekt zu instanziieren.
Wenn die von der Methode identifizierte baseName Ressourcendatei nicht assemblygefunden werden kann, instanziiert die Methode ein ResourceManager Objekt, aber der Versuch, eine bestimmte Ressource abzurufen, löst in der Regel MissingManifestResourceExceptioneine Ausnahme aus. Informationen zur Diagnose der Ursache der Ausnahme finden Sie im Abschnitt "Umgang mit der MissingManifestResourceException-Ausnahme" der Klassendokumentation von ResourceManager.
Note
Der usingResourceSet Parameter wird verwendet, um Ihr eigenes Ressourcenformat zu unterstützen und wird häufig sein null. Dies unterscheidet sich von dem Konstruktor, der nur einnimmt Type .
Hinweise für Aufrufer
Mit diesem Konstruktor können Sie eine ResourceSet Implementierung angeben. Wenn Sie keine bestimmte ResourceSet Implementierung benötigen, aber ein benutzerdefiniertes Ressourcendateiformat verwenden möchten, sollten Sie von der ResourceSet Klasse abgeleitet sein, die GetDefaultReader() Methoden GetDefaultWriter() außer Kraft setzen und diesen Typ an diesen Konstruktor übergeben.