ResourceManager Konstruktory

Definice

Inicializuje novou instanci ResourceManager třídy.

Přetížení

Name Description
ResourceManager()

Inicializuje novou instanci ResourceManager třídy s výchozími hodnotami.

ResourceManager(Type)

Inicializuje novou instanci ResourceManager třídy, která vyhledá prostředky v satelitních sestaveních na základě informací ze zadaného objektu typu.

ResourceManager(String, Assembly)

Inicializuje novou instanci ResourceManager třídy, která vyhledá prostředky obsažené v souborech se zadaným kořenovým názvem v daném sestavení.

ResourceManager(String, Assembly, Type)

Inicializuje novou instanci ResourceManager třídy, která používá zadanou ResourceSet třídu k vyhledání prostředků obsažených v souborech se zadaným kořenovým názvem v daném sestavení.

ResourceManager()

Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs

Inicializuje novou instanci ResourceManager třídy s výchozími hodnotami.

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

Poznámky

Tento konstruktor je užitečný pouze v případě, že napíšete vlastní třídu, která je odvozena od ResourceManager třídy.

Platí pro

ResourceManager(Type)

Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs

Inicializuje novou instanci ResourceManager třídy, která vyhledá prostředky v satelitních sestaveních na základě informací ze zadaného objektu 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, ze kterého správce prostředků odvodí všechny informace pro vyhledání souborů .resources.

Výjimky

Parametr resourceSource je null.

Poznámky

Desktopové aplikace

V desktopových aplikacích správce prostředků pomocí parametru resourceSource načte konkrétní soubor prostředků následujícím způsobem:

  • NeutralResourcesLanguageAttribute Pokud se atribut nepoužívá k označení, že prostředky výchozí jazykové verze se nacházejí v satelitním sestavení, správce prostředků předpokládá, že soubor prostředků pro výchozí jazykovou verzi se nachází ve stejném sestavení jako typ určený parametremresourceSource.
  • Správce prostředků předpokládá, že výchozí soubor prostředků má stejný základní název jako typ zadaný parametrem resourceSource .
  • Správce prostředků používá výchozí ResourceSet třídu k manipulaci se souborem prostředků.

Například v případě typu pojmenovaného MyCompany.MyProduct.MyTypesprávce prostředků vyhledá v sestavení, které definuje , soubor .resources s názvem MyType.

Návrhář prostředků v sadě Visual Studio automaticky vygeneruje kód, který definuje (v C#) nebo (ve Visual Basicu) třídu, jejíž název je stejný jako základní název souboru internal pro výchozí kultura. To umožňuje vytvořit instanci objektu ResourceManager a spojit ho s konkrétní sadou prostředků získáním objektu typu, jehož název odpovídá názvu prostředku, protože pokud je třída viditelná pro kompilátor, musí být také prostředky. Pokud má například soubor .resources název Resource1, vytvoří následující příkaz instanci ResourceManager objektu pro správu souboru .resources s názvem Resource1:

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

Pokud Visual Studio nepoužíváte, můžete vytvořit třídu bez členů, jejichž obor názvů a název odpovídají výchozímu souboru .resources. Příklad obsahuje obrázek.

Example

Následující příklad používá ResourceManager(Type) konstruktor k vytvoření instance objektu ResourceManager . Skládá se ze zdrojů zkompilovaných ze souborů .txt pro anglické (en), francouzské (Francie) (fr-FR) a ruské (Rusko) (ru-RU) kultury. Příklad změní aktuální kulturu a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (Spojené státy), francouzštinu (Francie), ruštinu (Rusko) a švédštinu (Švédsko). Potom zavolá metodu GetString(String) pro načtení lokalizovaného řetězce, který zobrazí pozdrav, který závisí na době dne.

Příklad vyžaduje tři textové soubory prostředků, jak je uvedeno v následující tabulce. Každý soubor obsahuje řetězcové prostředky s názvem Morning, Afternoona Evening.

Kultura Název souboru Název prostředku Hodnota zdroje
en-US GreetingResources.txt Morning Dobré ráno
en-US GreetingResources.txt Afternoon Dobré odpoledne
en-US GreetingResources.txt Evening Dobrý večer
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 Добрый вечер

Pomocí následujícího dávkového souboru můžete zkompilovat příklad jazyka Visual Basic a vytvořit spustitelný soubor s názvem Greet.exe. Chcete-li kompilovat pomocí jazyka C#, změňte název kompilátoru z vbc na csc a příponu souboru 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

Tady je zdrojový kód pro příklad (ShowDate.vb pro verzi jazyka Visual Basic nebo ShowDate.cs pro verzi kódu jazyka C#).

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!

Kromě definování třídy aplikace s názvem Example, zdrojový kód definuje interní třídu, jejíž název , GreetingResourcesje stejný jako základní název souborů prostředků. To umožňuje úspěšně vytvořit instanci ResourceManager objektu voláním konstruktoru ResourceManager(Type) .

Všimněte si, že výstup zobrazí příslušný lokalizovaný řetězec s výjimkou situace, kdy je aktuální jazyková verze uživatelského rozhraní švédština (Švédsko), v takovém případě používá prostředky anglického jazyka. Vzhledem k tomu, že prostředky švédského jazyka nejsou k dispozici, aplikace místo toho používá prostředky výchozí jazykové verze definované atributem NeutralResourcesLanguageAttribute .

Platí pro

ResourceManager(String, Assembly)

Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs

Inicializuje novou instanci ResourceManager třídy, která vyhledá prostředky obsažené v souborech se zadaným kořenovým názvem v daném sestavení.

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

Kořenový název souboru prostředků bez jeho přípony, ale včetně plně kvalifikovaného názvu oboru názvů. Například kořenový název souboru prostředku s názvem MyApplication.MyResource.en-US.resources je MyApplication.MyResource.

assembly
Assembly

Hlavní sestavení pro prostředky.

Výjimky

Parametr baseName je assemblynull.

Poznámky

Desktopové aplikace

V desktopových aplikacích by měly být soubory prostředků specifické pro jednotlivé jazykové verze obsaženy v satelitních sestaveních a soubor prostředků výchozí jazykové verze by měl být obsažen v hlavním sestavení. U satelitního sestavení se předpokládá, že obsahuje zdroje pro jednu jazykovou kulturu určenou v manifestu sestavení a je-li to potřeba, se načte.

Note

Chcete-li načíst prostředky ze souborů .resources přímo, místo jejich načtení ze sestavení, musíte místo toho volat metodu CreateFileBasedResourceManager, abyste instanciovali objekt ResourceManager.

Pokud nelze soubor prostředků identifikovaný baseName nalézt v assembly, metoda založí objekt ResourceManager, ale pokus o načtení konkrétního prostředku vyvolá výjimku, obvykle MissingManifestResourceException. Informace o diagnostikování příčiny výjimky naleznete v části tématu třídy ResourceManager, kde se probírá "Zpracování výjimky MissingManifestResourceException".

Example

Následující příklad používá k ilustraci ResourceManager(String, Assembly) konstruktoru jednoduchou nelokalitovou aplikaci Hello World. Obsah textového souboru s názvem ExampleResources.txt je Greeting=Hello. Při kompilaci aplikace se prostředek vloží do hlavního sestavení aplikace.

Textový soubor lze převést na binární soubor prostředků pomocí Generátoru souborů prostředků (ResGen.exe) na příkazovém řádku následujícím způsobem:

resgen ExampleResources.txt

Následující příklad poskytuje spustitelný kód, který vytvoří instanci objektu ResourceManager , vyzve uživatele k zadání jména a zobrazí pozdrav.

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!

Dá se zkompilovat pomocí následujícího příkazu v jazyce C#:

csc Example.cs /resource:ExampleResources.resources

Příklad načte odkaz na sestavení, které obsahuje soubor prostředků, když předáte typ definovaný v tomto sestavení funkci typeof (v jazyce C#) nebo funkci GetType (v jazyce Visual Basic) a získáte hodnotu jeho vlastnosti Type.Assembly.

Poznámky pro dědice

Tento konstruktor používá implementaci poskytovanou ResourceSet systémem. Chcete-li použít vlastní formát souboru prostředků, měli byste odvodit z ResourceSet třídy, přepsat GetDefaultReader() a GetDefaultWriter() metody a předat tento typ konstruktoru ResourceManager(String, Assembly, Type) . Použití vlastního ResourceSet souboru může být užitečné pro řízení zásad ukládání prostředků do mezipaměti nebo pro podporu vlastního formátu souboru prostředků, ale obecně není nutné.

Platí pro

ResourceManager(String, Assembly, Type)

Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs
Zdroj:
ResourceManager.cs

Inicializuje novou instanci ResourceManager třídy, která používá zadanou ResourceSet třídu k vyhledání prostředků obsažených v souborech se zadaným kořenovým názvem v daném sestavení.

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

Kořenový název souboru prostředků bez jeho přípony, ale včetně plně kvalifikovaného názvu oboru názvů. Například kořenový název souboru prostředku s názvem MyApplication.MyResource.en-US.resources je MyApplication.MyResource.

assembly
Assembly

Hlavní sestavení pro prostředky.

usingResourceSet
Type

Typ vlastního ResourceSet použití. Pokud nullse použije výchozí objekt modulu runtime ResourceSet .

Výjimky

usingResourceSet není odvozenou třídou ResourceSet.

Parametr baseName je assemblynull.

Poznámky

Jednotlivé soubory prostředků specifické pro jazykovou verzi by měly být obsaženy v satelitních sestaveních a soubor prostředků výchozí jazykové verze by měl být obsažen v hlavním sestavení. U satelitního sestavení se předpokládá, že obsahuje zdroje pro jednu jazykovou kulturu určenou v manifestu sestavení a je-li to potřeba, se načte.

Note

Chcete-li načíst prostředky ze souborů .resources přímo místo jejich načtení ze sestavení, je nutné volat metodu CreateFileBasedResourceManager místo vytvoření instance objektu ResourceManager .

Pokud nelze soubor prostředků identifikovaný baseName nalézt v assembly, metoda založí objekt ResourceManager, ale pokus o načtení konkrétního prostředku vyvolá výjimku, obvykle MissingManifestResourceException. Informace o diagnostikování příčiny výjimky naleznete v části tématu třídy ResourceManager, kde se probírá "Zpracování výjimky MissingManifestResourceException".

Note

Tento usingResourceSet parametr se používá k podpoře vlastního formátu prostředků a obvykle to bude null. To se liší od konstruktoru, který přebírá Type pouze.

Poznámky pro volající

Tento konstruktor umožňuje zadat implementaci ResourceSet . Pokud nechcete konkrétní ResourceSet implementaci, ale chcete použít vlastní formát souboru prostředků, měli byste odvodit z ResourceSet třídy, přepsat GetDefaultReader() a GetDefaultWriter() metody a předat tento typ tomuto konstruktoru.

Platí pro