ResourceManager Constructors
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Initialiseert een nieuw exemplaar van de ResourceManager klasse.
Overloads
| Name | Description |
|---|---|
| ResourceManager() |
Initialiseert een nieuw exemplaar van de ResourceManager klasse met standaardwaarden. |
| ResourceManager(Type) |
Initialiseert een nieuw exemplaar van de ResourceManager klasse waarmee resources in satellietassembly's worden opgezoekd op basis van informatie van het opgegeven typeobject. |
| ResourceManager(String, Assembly) |
Initialiseert een nieuw exemplaar van de ResourceManager klasse waarmee resources in bestanden met de opgegeven hoofdnaam in de opgegeven assembly worden opgezoekd. |
| ResourceManager(String, Assembly, Type) |
Initialiseert een nieuw exemplaar van de ResourceManager klasse die gebruikmaakt van een opgegeven ResourceSet klasse om resources op te zoeken die zijn opgenomen in bestanden met de opgegeven hoofdnaam in de opgegeven assembly. |
ResourceManager()
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
Initialiseert een nieuw exemplaar van de ResourceManager klasse met standaardwaarden.
protected:
ResourceManager();
protected ResourceManager();
Protected Sub New ()
Opmerkingen
Deze constructor is alleen nuttig als u uw eigen klasse schrijft die is afgeleid van de ResourceManager klasse.
Van toepassing op
ResourceManager(Type)
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
Initialiseert een nieuw exemplaar van de ResourceManager klasse waarmee resources in satellietassembly's worden opgezoekd op basis van informatie van het opgegeven typeobject.
public:
ResourceManager(Type ^ resourceSource);
public ResourceManager(Type resourceSource);
new System.Resources.ResourceManager : Type -> System.Resources.ResourceManager
Public Sub New (resourceSource As Type)
Parameters
- resourceSource
- Type
Een type waaruit resourcemanager alle informatie afleiden voor het vinden van .resources-bestanden.
Uitzonderingen
De resourceSource parameter is null.
Opmerkingen
Desktop-apps
In desktop-apps gebruikt Resource Manager de resourceSource parameter om een bepaald resourcebestand als volgt te laden:
- Als het NeutralResourcesLanguageAttribute kenmerk niet wordt gebruikt om aan te geven dat de resources van de standaardcultuur zich in een satellietassembly bevinden, wordt ervan uitgegaan dat het resourcebestand voor de standaardcultuur wordt gevonden in dezelfde assembly als het type dat is opgegeven door de
resourceSourceparameter. - De resourcemanager gaat ervan uit dat het standaardresourcebestand dezelfde basisnaam heeft als het type dat is opgegeven door de
resourceSourceparameter. - Resource Manager gebruikt de standaardklasse ResourceSet om het resourcebestand te bewerken.
Als er bijvoorbeeld een type genaamd MyCompany.MyProduct.MyType is, zoekt de resourcemanager naar een .resources-bestand met de naam MyCompany.MyProduct.MyType.resources in de assembly die MyType definieert.
In Visual Studio genereert Resource Designer automatisch code die een internal klasse (in C#) of Friend (in Visual Basic) definieert waarvan de naam gelijk is aan de basisnaam van het .resources-bestand voor de standaardcultuur. Dit maakt het mogelijk om een ResourceManager object te instantiëren en te koppelen aan een bepaalde set resources door een typeobject op te halen waarvan de naam overeenkomt met de naam van de resource, omdat zolang de klasse zichtbaar is voor de compiler, de resources ook moeten zijn. Als bijvoorbeeld een .resources-bestand de naam Resource1 heeft, wordt met de volgende instructie een ResourceManager object geïnstitueert voor het beheren van het .resources-bestand met de naam Resource1:
ResourceManager rm = new ResourceManager(typeof(Resource1));
Als u Visual Studio niet gebruikt, kunt u een klasse maken zonder leden waarvan de naamruimte en naam hetzelfde zijn als die van het standaard .resources-bestand . In het voorbeeld ziet u een afbeelding.
Example
In het volgende voorbeeld wordt de ResourceManager(Type) constructor gebruikt om een ResourceManager object te instantiëren. Het bestaat uit bronnen die zijn samengesteld uit .txt bestanden voor de Engelse (en), Frans (Frankrijk) (fr-FR) en Russisch (Rusland) (ru-RU) culturen. In het voorbeeld wordt de huidige cultuur en de huidige UI-cultuur gewijzigd in Engels (Verenigde Staten), Frans (Frankrijk), Russisch (Rusland) en Zweeds (Zweden). Vervolgens wordt de GetString(String) methode aangeroepen om de gelokaliseerde tekenreeks op te halen, die een begroeting weergeeft die afhankelijk is van het tijdstip van de dag.
Voor het voorbeeld zijn drie bronbestanden op basis van tekst vereist, zoals wordt vermeld in de volgende tabel. Elk bestand bevat tekenreeksbronnen met de naam Morning, Afternoonen Evening.
| Cultuur | Bestandsnaam | Naam van bron | Bronwaarde |
|---|---|---|---|
| en-US | GreetingResources.txt | Morning |
Goedemorgen |
| en-US | GreetingResources.txt | Afternoon |
Goedemiddag |
| en-US | GreetingResources.txt | Evening |
Goedenavond |
| 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 |
Добрый вечер |
U kunt het volgende batchbestand gebruiken om het Visual Basic-voorbeeld te compileren en een uitvoerbaar bestand met de naam Greet.exete maken. Als u wilt compileren met C#, wijzigt u de naam van de compiler in vbccsc en de bestandsextensie van .vb in .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 volgt de broncode voor het voorbeeld (ShowDate.vb voor de Visual Basic-versie of ShowDate.cs voor de C#-versie van de code).
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!
Naast het definiëren van een app-klasse met de naam Example, definieert de broncode een interne klasse waarvan de naam GreetingResources, hetzelfde is als de basisnaam van de resourcebestanden. Dit maakt het mogelijk om een ResourceManager object te instantiëren door de ResourceManager(Type) constructor aan te roepen.
Merk op dat in de uitvoer de juiste gelokaliseerde tekenreeks wordt weergegeven, behalve wanneer de huidige UI-cultuur Zweeds (Zweden) is; dan worden Engelse taalbronnen gebruikt. Omdat Zweedse taalbronnen niet beschikbaar zijn, gebruikt de app in plaats daarvan de resources van de standaardcultuur, zoals gedefinieerd door het NeutralResourcesLanguageAttribute kenmerk.
Van toepassing op
ResourceManager(String, Assembly)
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
Initialiseert een nieuw exemplaar van de ResourceManager klasse waarmee resources in bestanden met de opgegeven hoofdnaam in de opgegeven assembly worden opgezoekd.
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)
Parameters
- baseName
- String
De hoofdnaam van het resourcebestand zonder extensie, maar inclusief een volledig gekwalificeerde naamruimtenaam. Bijvoorbeeld de hoofdnaam voor het resourcebestand met de naam MyApplication.MyResource.en-US.resources is MyApplication.MyResource.
- assembly
- Assembly
De hoofdassembly voor de resources.
Uitzonderingen
De baseName of assembly parameter is null.
Opmerkingen
Desktop-apps
In bureaublad-apps moeten de afzonderlijke cultuurspecifieke bronbestanden worden opgenomen in satellietassembly's en moet het bronbestand van de standaardcultuur zich in de hoofdassembly bevinden. Er wordt uitgegaan van een satellietassembly die resources bevat voor een specifieke cultuur zoals opgegeven in het manifest van die assembly en indien nodig wordt geladen.
Note
Als u resources rechtstreeks uit .resources-bestanden wilt ophalen in plaats van ze op te halen uit assembly's, moet u in plaats daarvan de CreateFileBasedResourceManager methode aanroepen om een ResourceManager object te instantiëren.
Als het resourcebestand dat is geïdentificeerd door baseName niet kan worden gevonden in assembly, instantieert de methode een ResourceManager-object, maar de poging om een specifieke resource op te halen genereert meestal een MissingManifestResourceException-uitzondering. Zie de sectie "Handling the MissingManifestResourceException Exception" in het ResourceManager klasse-onderwerp voor meer informatie over het diagnosticeren van de oorzaak van de uitzondering.
Example
In het volgende voorbeeld wordt een eenvoudige niet-gelokaliseerde 'Hallo wereld'-app gebruikt om de ResourceManager(String, Assembly) constructor te illustreren. De inhoud van een tekstbestand ExampleResources.txt is Greeting=Hello. Wanneer de app is gecompileerd, wordt de resource ingesloten in de hoofd-app-assembly.
Het tekstbestand kan als volgt worden geconverteerd naar een binair resourcebestand met behulp van de resourcebestandgenerator (ResGen.exe) bij de opdrachtprompt:
resgen ExampleResources.txt
Het volgende voorbeeld bevat de uitvoerbare code waarmee een ResourceManager object wordt geïnstitueert, de gebruiker wordt gevraagd een naam in te voeren en een begroeting weergeeft.
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!
Deze kan worden gecompileerd met behulp van de volgende opdracht in C#:
csc Example.cs /resource:ExampleResources.resources
In het voorbeeld wordt een verwijzing opgehaald naar de assembly die het resourcebestand bevat, door een type dat in die assembly is gedefinieerd door te geven aan de typeof functie (in C#) of de GetType functie (in Visual Basic) en vervolgens de waarde van de Type.Assembly eigenschap op te halen.
Notities voor overnemers
Deze constructor maakt gebruik van de door het systeem geleverde ResourceSet implementatie. Als u een aangepaste resourcebestandsindeling wilt gebruiken, moet u afgeleid zijn van de ResourceSet klasse, de GetDefaultReader() en GetDefaultWriter() methoden overschrijven en dat type doorgeven aan de ResourceManager(String, Assembly, Type) constructor. Het gebruik van een aangepaste ResourceSet indeling kan handig zijn voor het beheren van het cachebeleid voor resources of het ondersteunen van uw eigen resourcebestandsindeling, maar is over het algemeen niet nodig.
Van toepassing op
ResourceManager(String, Assembly, Type)
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
- Bron:
- ResourceManager.cs
Initialiseert een nieuw exemplaar van de ResourceManager klasse die gebruikmaakt van een opgegeven ResourceSet klasse om resources op te zoeken die zijn opgenomen in bestanden met de opgegeven hoofdnaam in de opgegeven assembly.
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)
Parameters
- baseName
- String
De hoofdnaam van het resourcebestand zonder extensie, maar inclusief een volledig gekwalificeerde naamruimtenaam. Bijvoorbeeld de hoofdnaam voor het resourcebestand met de naam MyApplication.MyResource.en-US.resources is MyApplication.MyResource.
- assembly
- Assembly
De hoofdassembly voor de resources.
- usingResourceSet
- Type
Het type aangepast dat ResourceSet moet worden gebruikt. Als nullhet standaardruntimeobject ResourceSet wordt gebruikt.
Uitzonderingen
usingResourceSet is geen afgeleide klasse van ResourceSet.
De baseName of assembly parameter is null.
Opmerkingen
De afzonderlijke cultuurspecifieke bronbestanden moeten worden opgenomen in satellietassembly's en het bronbestand van de standaardcultuur moet zich in de hoofdassembly bevinden. Er wordt uitgegaan van een satellietassembly die resources bevat voor een specifieke cultuur zoals opgegeven in het manifest van die assembly en indien nodig wordt geladen.
Note
Als u resources rechtstreeks uit .resources-bestanden wilt ophalen in plaats van ze op te halen uit assembly's, moet u in plaats daarvan de CreateFileBasedResourceManager methode aanroepen om een ResourceManager object te instantiëren.
Als het resourcebestand dat is geïdentificeerd door baseName niet kan worden gevonden in assembly, instantieert de methode een ResourceManager-object, maar de poging om een specifieke resource op te halen genereert meestal een MissingManifestResourceException-uitzondering. Zie de sectie "Handling the MissingManifestResourceException Exception" in het ResourceManager klasse-onderwerp voor meer informatie over het diagnosticeren van de oorzaak van de uitzondering.
Note
De usingResourceSet parameter wordt gebruikt ter ondersteuning van uw eigen resourceindeling en wordt meestal gebruikt null. Dit verschilt van de constructor die alleen een Type andere heeft.
Notities voor bellers
Met deze constructor kunt u een ResourceSet implementatie opgeven. Als u geen specifieke ResourceSet implementatie wilt, maar een aangepaste resourcebestandsindeling wilt gebruiken, moet u afleiden van de ResourceSet klasse, de GetDefaultReader() methoden overschrijven en GetDefaultWriter() dat type doorgeven aan deze constructor.