ResourceManager Konstruktorer

Definition

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.

Gäller för