ResourceManager Konstruktorer
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Initierar en ny instans av ResourceManager klassen.
Överlagringar
| Name | Description |
|---|---|
| ResourceManager() |
Initierar en ny instans av ResourceManager klassen med standardvärden. |
| ResourceManager(Type) |
Initierar en ny instans av ResourceManager klassen som söker efter resurser i satellitsammansättningar baserat på information från det angivna typobjektet. |
| ResourceManager(String, Assembly) |
Initierar en ny instans av ResourceManager klassen som söker efter resurser som finns i filer med det angivna rotnamnet i den angivna sammansättningen. |
| ResourceManager(String, Assembly, Type) |
Initierar en ny instans av ResourceManager klassen som använder en angiven ResourceSet klass för att söka efter resurser som finns i filer med det angivna rotnamnet i den angivna sammansättningen. |
ResourceManager()
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
Initierar en ny instans av ResourceManager klassen med standardvärden.
protected:
ResourceManager();
protected ResourceManager();
Protected Sub New ()
Kommentarer
Den här konstruktorn är bara användbar om du skriver din egen klass som härleds från ResourceManager klassen.
Gäller för
ResourceManager(Type)
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
Initierar en ny instans av ResourceManager klassen som söker efter resurser i satellitsammansättningar baserat på information från det angivna typobjektet.
public:
ResourceManager(Type ^ resourceSource);
public ResourceManager(Type resourceSource);
new System.Resources.ResourceManager : Type -> System.Resources.ResourceManager
Public Sub New (resourceSource As Type)
Parametrar
- resourceSource
- Type
En typ som resurshanteraren härleder all information från för att hitta .resources-filer.
Undantag
Parametern resourceSource är null.
Kommentarer
Skrivbordsappar
I skrivbordsappar använder resurshanteraren parametern resourceSource för att läsa in en viss resursfil på följande sätt:
- Om attributet NeutralResourcesLanguageAttribute inte används för att indikera att resurserna i standardkulturen finns i en satellitsammansättning, förutsätter resurshanteraren att resursfilen för standardkulturen finns i samma sammansättning som den typ som anges av parametern
resourceSource. - Resurshanteraren förutsätter att standardresursfilen har samma basnamn som den typ som anges av parametern
resourceSource. - Resurshanteraren använder standardklassen ResourceSet för att ändra resursfilen.
Med en typ med namnet MyCompany.MyProduct.MyTypeletar resurshanteraren till exempel efter en .resources-fil med namnet MyCompany.MyProduct.MyType.resources i sammansättningen som definierar MyType.
I Visual Studio genererar Resursdesignern automatiskt kod som definierar en internal (i C#) eller Friend -klassen (i Visual Basic) vars namn är samma som basnamnet för .resources fil för standardkulturen. Detta gör det möjligt att instansiera ett ResourceManager objekt och koppla det till en viss uppsättning resurser genom att hämta ett typobjekt vars namn motsvarar resursens namn, eftersom resurserna måste vara lika så länge klassen är synlig för kompilatorn. Om till exempel en .resources-fil heter Resource1 instansierar följande instruktion ett ResourceManager objekt för att hantera .resources fil med namnet Resource1:
ResourceManager rm = new ResourceManager(typeof(Resource1));
Om du inte använder Visual Studio kan du skapa en klass utan medlemmar vars namnområde och namn är samma som för standardfilen .resources fil. Exemplet innehåller en bild.
Example
I följande exempel används konstruktorn ResourceManager(Type) för att instansiera ett ResourceManager objekt. Den består av resurser som sammanställts från .txt filer för den engelska (en), franska (Frankrike) (fr-FR), och ryska (Ryssland) (ru-RU) kulturer. Exemplet ändrar den aktuella kulturen och den aktuella användargränssnittskulturen till engelska (USA), franska (Frankrike), ryska (Ryssland) och svenska (Sverige). Den anropar sedan metoden GetString(String) för att hämta den lokaliserade strängen, som visar en hälsning som är beroende av tiden på dagen.
Exemplet kräver tre textbaserade resursfiler, enligt listan i följande tabell. Varje fil innehåller strängresurser med namnet Morning, Afternoonoch Evening.
| Kultur | Filnamn | Resursnamn | Resursvärde |
|---|---|---|---|
| en-US | GreetingResources.txt | Morning |
God morgon |
| en-US | GreetingResources.txt | Afternoon |
God eftermiddag |
| en-US | GreetingResources.txt | Evening |
God kväll |
| 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 |
Добрый вечер |
Du kan använda följande batchfil för att kompilera Visual Basic-exemplet och skapa en körbar fil med namnet Greet.exe. Kompilera med C#genom att ändra kompilatornamnet från vbc till csc och filnamnstillägget från .vb till .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
Här är källkoden för exemplet (ShowDate.vb för Visual Basic-versionen eller ShowDate.cs för C#-versionen av koden).
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!
Förutom att definiera en appklass med namnet Exampledefinierar källkoden en intern klass vars namn, GreetingResources, är samma som basnamnet för resursfilerna. Detta gör det möjligt att instansiera ett ResourceManager objekt genom att anropa ResourceManager(Type) konstruktorn.
Observera att utdata visar lämplig lokaliserad sträng utom när den aktuella användargränssnittskulturen är svensk (Sverige), i vilket fall den använder engelska språkresurser. Eftersom svenska språkresurser inte är tillgängliga använder appen i stället resurserna i standardkulturen, enligt definitionen i attributet NeutralResourcesLanguageAttribute.
Gäller för
ResourceManager(String, Assembly)
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
Initierar en ny instans av ResourceManager klassen som söker efter resurser som finns i filer med det angivna rotnamnet i den angivna sammansättningen.
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)
Parametrar
- baseName
- String
Rotnamnet för resursfilen utan dess tillägg, men inklusive ett fullständigt namnområdesnamn. Till exempel rotnamnet för resursfilen med namnet MyApplication.MyResource.en-US.resources är MyApplication.MyResource.
- assembly
- Assembly
Huvudsammansättningen för resurserna.
Undantag
Parametern baseName eller assembly är null.
Kommentarer
Skrivbordsappar
I skrivbordsappar ska de enskilda kulturspecifika resursfilerna finnas i satellitsammansättningar och standardkulturens resursfil ska finnas i huvudsammansättningen. En satellitsammansättning antas innehålla resurser för en specifik kultur som anges i sammansättningens manifest och laddas in vid behov.
Note
Om du vill hämta resurser från .resources filer direkt i stället för att hämta dem från sammansättningar måste du anropa metoden CreateFileBasedResourceManager i stället för att instansiera ett ResourceManager objekt.
Om resursfilen som identifieras av baseName inte finns i assemblyinstansierar metoden ett ResourceManager objekt, men försöket att hämta en specifik resurs genererar ett undantag, vanligtvis MissingManifestResourceException. Information om hur du diagnostiserar orsaken till undantaget finns i avsnittet "Hantera undantaget MissingManifestResourceException" i ResourceManager-klassavsnittet.
Example
I följande exempel används en enkel icke-lokaliserad "Hello World"-app för att illustrera ResourceManager(String, Assembly) konstruktorn. Innehållet i en textfil med namnet ExampleResources.txt är Greeting=Hello. När appen kompileras bäddas resursen in i huvudappsammansättningen.
Textfilen kan konverteras till en binär resursfil med hjälp av Resource File Generator (ResGen.exe) i kommandotolken enligt följande:
resgen ExampleResources.txt
I följande exempel visas den körbara kod som instansierar ett ResourceManager objekt, uppmanar användaren att ange ett namn och visar en hälsning.
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!
Den kan kompileras med hjälp av följande kommando i C#:
csc Example.cs /resource:ExampleResources.resources
Exemplet hämtar en referens till sammansättningen som innehåller resursfilen genom att skicka en typ som definierats i sammansättningen till funktionen typeof (i C#) eller funktionen GetType (i Visual Basic) och hämta värdet för dess Type.Assembly egenskap.
Anteckningar till arvingar
Den här konstruktorn använder den systembaserade ResourceSet implementeringen. Om du vill använda ett anpassat resursfilformat bör du härleda från ResourceSet klassen, åsidosätta GetDefaultReader() metoderna och GetDefaultWriter() och skicka den typen till ResourceManager(String, Assembly, Type) konstruktorn. Att använda en anpassad ResourceSet kan vara användbart för att styra cachelagringsprincipen för resurser eller stödja ditt eget resursfilformat, men är vanligtvis inte nödvändigt.
Gäller för
ResourceManager(String, Assembly, Type)
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
- Källa:
- ResourceManager.cs
Initierar en ny instans av ResourceManager klassen som använder en angiven ResourceSet klass för att söka efter resurser som finns i filer med det angivna rotnamnet i den angivna sammansättningen.
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)
Parametrar
- baseName
- String
Rotnamnet för resursfilen utan dess tillägg, men inklusive ett fullständigt namnområdesnamn. Till exempel rotnamnet för resursfilen med namnet MyApplication.MyResource.en-US.resources är MyApplication.MyResource.
- assembly
- Assembly
Huvudsammansättningen för resurserna.
- usingResourceSet
- Type
Typen av anpassad ResourceSet som ska användas. Om nullanvänds standard-runtime-objektet ResourceSet .
Undantag
usingResourceSet är inte en härledd klass av ResourceSet.
Parametern baseName eller assembly är null.
Kommentarer
De enskilda kulturspecifika resursfilerna ska finnas i satellitsammansättningar och standardkulturens resursfil ska finnas i huvudsammansättningen. En satellitsammansättning antas innehålla resurser för en specifik kultur som anges i sammansättningens manifest och laddas in vid behov.
Note
Om du vill hämta resurser från .resources-filer direkt i stället för att hämta dem från sammansättningar måste du anropa CreateFileBasedResourceManager metoden i stället för att instansiera ett ResourceManager objekt.
Om resursfilen som identifieras av baseName inte finns i assemblyinstansierar metoden ett ResourceManager objekt, men försöket att hämta en specifik resurs genererar ett undantag, vanligtvis MissingManifestResourceException. Information om hur du diagnostiserar orsaken till undantaget finns i avsnittet "Hantera undantaget MissingManifestResourceException" i ResourceManager-klassavsnittet.
Note
Parametern usingResourceSet används för att stödja ditt eget resursformat och är vanligtvis null. Detta skiljer sig från konstruktorn som bara tar en Type .
Anteckningar till anropare
Med den här konstruktorn kan du ange en ResourceSet implementering. Om du inte vill ha en specifik ResourceSet implementering men vill använda ett anpassat resursfilformat bör du härleda från ResourceSet klassen, åsidosätta GetDefaultReader() metoderna och GetDefaultWriter() och skicka den typen till den här konstruktorn.