ResourceManager Costruttori
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Inizializza una nuova istanza della classe ResourceManager.
Overload
ResourceManager() |
Inizializza una nuova istanza della classe ResourceManager con i valori predefiniti. |
ResourceManager(Type) |
Inizializza una nuova istanza della classe ResourceManager che ricerca le risorse negli assembly satellite in base alle informazioni derivate dall'oggetto di tipo specificato. |
ResourceManager(String, Assembly) |
Inizializza una nuova istanza della classe ResourceManager che ricerca le risorse contenute nei file con il nome radice specificato nell'assembly fornito. |
ResourceManager(String, Assembly, Type) |
Inizializza una nuova istanza della classe ResourceManager che usa una classe ResourceSet specificata per cercare le risorse contenute nei file con il nome radice specificato nell'assembly fornito. |
ResourceManager()
Inizializza una nuova istanza della classe ResourceManager con i valori predefiniti.
protected:
ResourceManager();
protected ResourceManager ();
Protected Sub New ()
Commenti
Questo costruttore è utile solo se si scrive una classe personalizzata che deriva dalla ResourceManager classe .
Si applica a
ResourceManager(Type)
Inizializza una nuova istanza della classe ResourceManager che ricerca le risorse negli assembly satellite in base alle informazioni derivate dall'oggetto di tipo specificato.
public:
ResourceManager(Type ^ resourceSource);
public ResourceManager (Type resourceSource);
new System.Resources.ResourceManager : Type -> System.Resources.ResourceManager
Public Sub New (resourceSource As Type)
Parametri
- resourceSource
- Type
Tipo da cui il gestore delle risorse deriva tutte le informazioni per la ricerca dei file con estensione resources.
Eccezioni
Il valore del parametro resourceSource
è null
.
Esempio
Nell'esempio seguente viene utilizzato il costruttore per creare un'istanza ResourceManager(Type) di un ResourceManager oggetto . È costituito da risorse compilate da .txt file per le impostazioni cultura inglese (en), francese (francia) (fr-FR) e russo (Russia) (ru-UR). L'esempio modifica le impostazioni cultura correnti e le impostazioni cultura correnti dell'interfaccia utente in Inglese (Stati Uniti), Francese (Francia), Russo (Russia) e Svedese (Svezia). Chiama quindi il GetString(String) metodo per recuperare la stringa localizzata, che visualizza un messaggio di saluto che dipende dall'ora del giorno.
L'esempio richiede tre file di risorse basati su testo, come indicato nella tabella seguente. Ogni file include risorse stringa denominate Morning
, Afternoon
e Evening
.
Impostazioni cultura | Nome file | Nome risorsa | Valore della risorsa |
---|---|---|---|
it-IT | GreetingResources.txt | Morning |
Buongiorno |
it-IT | GreetingResources.txt | Afternoon |
Buon pomeriggio |
it-IT | GreetingResources.txt | Evening |
Buonasera |
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 |
Добрый вечер |
È possibile usare il file batch seguente per compilare l'esempio di Visual Basic e creare un eseguibile denominato Greet.exe. Per eseguire la compilazione con C#, modificare il nome del compilatore da vbc
a csc
e l'estensione di file da .vb
a .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
Ecco il codice sorgente per l'esempio (ShowDate.vb per la versione di Visual Basic o ShowDate.cs per la versione C# del codice).
using System;
using System.Resources;
using System.Globalization;
using System.Threading;
[assembly:NeutralResourcesLanguage("en")]
public class Example
{
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 {0}",
CultureInfo.CurrentUICulture.Name);
if (DateTime.Now < noon)
Console.WriteLine("{0}!", rm.GetString("Morning"));
else if (DateTime.Now < evening)
Console.WriteLine("{0}!", rm.GetString("Afternoon"));
else
Console.WriteLine("{0}!", 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!
Oltre a definire una classe app denominata Example
, il codice sorgente definisce una classe interna il cui nome, GreetingResources
, corrisponde al nome di base dei file di risorse. In questo modo è possibile creare un'istanza di un ResourceManager oggetto chiamando il ResourceManager(Type) costruttore .
Si noti che l'output visualizza la stringa localizzata appropriata, tranne quando le impostazioni cultura correnti dell'interfaccia utente sono svedesi (Svezia), nel qual caso usa le risorse della lingua inglese. Poiché le risorse della lingua svedese non sono disponibili, l'app usa le risorse delle impostazioni cultura predefinite, come definito dall'attributo NeutralResourcesLanguageAttribute .
Commenti
App desktop
Nelle app desktop, Resource Manager usa il resourceSource
parametro per caricare un determinato file di risorse come indicato di seguito:
Se l'attributo NeutralResourcesLanguageAttribute non viene usato per indicare che le risorse delle impostazioni cultura predefinite risiedono in un assembly satellite, gestione risorse presuppone che il file di risorse per le impostazioni cultura predefinite venga trovato nello stesso assembly del tipo specificato dal
resourceSource
parametro .Gestione risorse presuppone che il file di risorse predefinito abbia lo stesso nome di base del tipo specificato dal
resourceSource
parametro .Gestione risorse usa la classe predefinita ResourceSet per modificare il file di risorse.
Ad esempio, dato un tipo denominato MyCompany.MyProduct.MyType, gestione risorse cerca un file con estensione resources denominato MyCompany.MyProduct.MyType.resources nell'assembly che definisce MyType.
In Visual Studio, Progettazione risorse genera automaticamente codice che definisce una internal
classe (in C#) o Friend
(in Visual Basic) il cui nome corrisponde al nome di base del file con estensione resources per le impostazioni cultura predefinite. In questo modo è possibile creare un'istanza di un ResourceManager oggetto e associarlo a un determinato set di risorse ottenendo un oggetto di tipo il cui nome corrisponde al nome della risorsa, perché purché la classe sia visibile al compilatore, le risorse devono anche essere. Ad esempio, se un file con estensione resources è denominato Resource1, l'istruzione seguente crea un'istanza di un ResourceManager oggetto per gestire il file con estensione resources denominato Resource1:
ResourceManager rm = new ResourceManager(typeof(Resource1));
Se non si usa Visual Studio, è possibile creare una classe senza membri il cui spazio dei nomi e nome corrispondono a quello del file con estensione resources predefinito. Nell'esempio viene illustrata una situazione di questo tipo.
App Windows 8.x
Importante
Anche se la ResourceManager classe è supportata nelle app Windows 8.x, non è consigliabile usarla. Usare questa classe solo quando si sviluppano progetti libreria di classi portabili che possono essere usati con app Windows 8.x. Per recuperare le risorse dalle app Windows 8.x, usare invece la classe Windows.ApplicationModel.Resources.ResourceLoader.
Nelle app Windows 8.x usa ResourceManager il resourceSource
parametro per dedurre l'assembly, il nome di base e lo spazio dei nomi in cui gli elementi della risorsa possono trovarsi all'interno del file PRI (Package Resource Index) dell'app. Ad esempio, dato un tipo denominato MyCompany.MyProduct.MyType definito in MyAssembly
, il gestore risorse cerca un identificatore del set di risorse denominato MyAssembly e cerca un ambito MyCompany.MyProduct.MyType all'interno di tale set di risorse. Gestione risorse cerca gli elementi delle risorse nel contesto predefinito (impostazioni cultura correnti, impostazione a contrasto elevato corrente e così via) all'interno di questo ambito.
Si applica a
ResourceManager(String, Assembly)
Inizializza una nuova istanza della classe ResourceManager che ricerca le risorse contenute nei file con il nome radice specificato nell'assembly fornito.
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)
Parametri
- baseName
- String
Il nome radice del file di risorse senza l'estensione, ma con un nome completo dello spazio dei nomi. Il nome radice per il file di risorse denominato "MyApplication.MyResource.en-US.resources" è ad esempio "MyApplication.MyResource".
- assembly
- Assembly
Assembly principale per le risorse.
Eccezioni
Il parametro baseName
o il parametro assembly
è null
.
Esempio
Nell'esempio seguente viene usata una semplice app "Hello World" non localizzata per illustrare il ResourceManager(String, Assembly) costruttore. Di seguito viene illustrato il contenuto di un file di testo denominato ExampleResources.txt. Quando l'app viene compilata, la risorsa viene incorporata nell'assembly principale dell'app.
Greeting=Hello
Il file di testo può essere convertito in un file di risorse binario usando il generatore di file di risorse (ResGen.exe) al prompt dei comandi come segue:
resgen ExampleResources.txt
L'esempio seguente fornisce il codice eseguibile che crea un'istanza di un ResourceManager oggetto, richiede all'utente di immettere un nome e visualizza un messaggio di saluto.
using System;
using System.Reflection;
using System.Resources;
public class Example
{
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("{0} {1}!", 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 Example
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!
Può essere compilato usando il comando seguente in Visual Basic:
vbc Example.vb /resource:ExampleResources.resources
oppure usando il comando seguente in C#:
csc Example.cs /resource:ExampleResources.resources
Si noti che nell'esempio viene recuperato un riferimento all'assembly che contiene il file di risorse passando un tipo definito in tale assembly alla typeof
funzione (in C#) o alla GetType
funzione (in Visual Basic) e recuperando il valore della relativa Type.Assembly proprietà.
Commenti
App desktop
Nelle app desktop i singoli file di risorse specifici delle impostazioni cultura devono essere contenuti negli assembly satellite e il file di risorse delle impostazioni cultura predefinito deve essere contenuto nell'assembly principale. Si presuppone che un assembly satellite contenga risorse per una singola impostazione cultura specificata nel manifesto dell'assembly e che venga caricato in base alle esigenze.
Nota
Per recuperare le risorse dai file con estensione resources direttamente anziché recuperarle dagli assembly, è necessario chiamare il CreateFileBasedResourceManager metodo per creare un'istanza di un ResourceManager oggetto .
Se il file di risorsa identificato da baseName
non può essere trovato in assembly
, il metodo crea un'istanza di un ResourceManager oggetto, ma il tentativo di recuperare una risorsa specifica genera un'eccezione, in MissingManifestResourceExceptiongenere . Per informazioni sulla diagnosi della causa dell'eccezione, vedere la sezione "Gestione dell'eccezione MissingManifestResourceException" dell'argomento ResourceManager della classe.
app Windows 8.x
Importante
Anche se la ResourceManager classe è supportata nelle app Windows 8.x, non è consigliabile usarla. Usare questa classe solo quando si sviluppano progetti di libreria di classi portabili che possono essere usati con app Windows 8.x. Per recuperare le risorse dalle app Windows 8.x, usare invece la classe Windows.ApplicationModel.Resources.ResourceLoader.
Nelle app Windows 8.x, gestione risorse usa il nome semplice del assembly
parametro per cercare una risorsa corrispondente impostata nel file PRI (Package Resource Index) dell'app. Il baseName
parametro viene usato per cercare un elemento di risorsa all'interno del set di risorse. Ad esempio, il nome radice per PortableLibrary1.Resource1.de-DE.resources è PortableLibrary1.Resource1.
Note per gli eredi
Questo costruttore usa l'implementazione fornita dal ResourceSet sistema. Per usare un formato di file di risorse personalizzato, è necessario derivare dalla ResourceSet classe , eseguire l'override dei GetDefaultReader() metodi e GetDefaultWriter() e passare tale tipo al ResourceManager(String, Assembly, Type) costruttore. L'uso di un personalizzato ResourceSet può essere utile per controllare i criteri di memorizzazione nella cache delle risorse o supportare il proprio formato di file di risorse, ma in genere non è necessario.
Si applica a
ResourceManager(String, Assembly, Type)
Inizializza una nuova istanza della classe ResourceManager che usa una classe ResourceSet specificata per cercare le risorse contenute nei file con il nome radice specificato nell'assembly fornito.
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)
Parametri
- baseName
- String
Il nome radice del file di risorse senza l'estensione, ma con un nome completo dello spazio dei nomi. Il nome radice per il file di risorse denominato "MyApplication.MyResource.en-US.resources" è ad esempio "MyApplication.MyResource".
- assembly
- Assembly
Assembly principale per le risorse.
- usingResourceSet
- Type
Tipo dell'oggetto ResourceSet personalizzato da usare. Se è null
, viene usato l'oggetto ResourceSet di runtime predefinito.
Eccezioni
usingResourceset
non è una classe derivata di ResourceSet.
Il parametro baseName
o il parametro assembly
è null
.
Commenti
I singoli file di risorse specifici delle impostazioni cultura devono essere contenuti negli assembly satellite e il file di risorse delle impostazioni cultura predefinito deve essere contenuto nell'assembly principale. Si presuppone che un assembly satellite contenga risorse per una singola cultura specificata nel manifesto dell'assembly e venga caricato in base alle esigenze.
Nota
Per recuperare le risorse dai file con estensione resources direttamente anziché recuperarli dagli assembly, è necessario chiamare il metodo per creare un'istanza CreateFileBasedResourceManager di un ResourceManager oggetto.
Se il file di risorsa identificato da baseName
non può essere trovato in assembly
, il metodo crea un'istanza di un ResourceManager oggetto, ma il tentativo di recuperare una risorsa specifica genera un'eccezione, in MissingManifestResourceExceptiongenere . Per informazioni sulla diagnosi della causa dell'eccezione, vedere la sezione "Gestione dell'eccezione MissingManifestResourceException" dell'argomento ResourceManager della classe.
Nota
Il usingResourceSet
parametro viene usato per supportare il proprio formato di risorsa e in genere sarà null
. Questo è diverso dal costruttore che accetta solo un Type oggetto.
Note per i chiamanti
Questo costruttore consente di specificare un'implementazione ResourceSet . Se non si vuole un'implementazione specifica ResourceSet , ma si vuole usare un formato di file di risorse personalizzato, è necessario derivare dalla classe, eseguire l'override ResourceSet dei GetDefaultReader() metodi e GetDefaultWriter() e passare tale tipo a questo costruttore.