ResourceManager コンストラクター

定義

ResourceManager クラスの新しいインスタンスを初期化します。

オーバーロード

名前 説明
ResourceManager()

既定値を使用して、 ResourceManager クラスの新しいインスタンスを初期化します。

ResourceManager(Type)

指定した型オブジェクトの情報に基づいてサテライト アセンブリ内のリソースを検索する ResourceManager クラスの新しいインスタンスを初期化します。

ResourceManager(String, Assembly)

指定したアセンブリ内の指定したルート名を持つファイルに含まれるリソースを検索する、 ResourceManager クラスの新しいインスタンスを初期化します。

ResourceManager(String, Assembly, Type)

指定したResourceManager クラスを使用して、指定したアセンブリ内の指定したルート名を持つファイルに含まれるリソースを検索する、ResourceSet クラスの新しいインスタンスを初期化します。

ResourceManager()

ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs

既定値を使用して、 ResourceManager クラスの新しいインスタンスを初期化します。

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

注釈

このコンストラクターは、 ResourceManager クラスから派生する独自のクラスを記述する場合にのみ役立ちます。

適用対象

ResourceManager(Type)

ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs

指定した型オブジェクトの情報に基づいてサテライト アセンブリ内のリソースを検索する ResourceManager クラスの新しいインスタンスを初期化します。

public:
 ResourceManager(Type ^ resourceSource);
public ResourceManager(Type resourceSource);
new System.Resources.ResourceManager : Type -> System.Resources.ResourceManager
Public Sub New (resourceSource As Type)

パラメーター

resourceSource
Type

リソース マネージャーが .resources ファイルを検索するためのすべての情報を派生させる型。

例外

resourceSource パラメーターはnull

注釈

デスクトップ アプリ

デスクトップ アプリでは、リソース マネージャーは resourceSource パラメーターを使用して、次のように特定のリソース ファイルを読み込みます。

  • NeutralResourcesLanguageAttribute 属性を使用して、既定のカルチャのリソースがサテライト アセンブリに存在することを示さない場合、リソース マネージャーは、既定のカルチャのリソース ファイルが、resourceSource パラメーターで指定された型と同じアセンブリ内にあると見なします。
  • リソース マネージャーは、既定のリソース ファイルのベース名が、resourceSource パラメーターで指定された型と同じであることを前提としています。
  • リソース マネージャーは、既定の ResourceSet クラスを使用してリソース ファイルを操作します。

たとえば、MyCompany.MyProduct.MyTypeという名前の型を指定すると、リソース マネージャーは、を定義するアセンブリ MyCompany.MyProduct.MyType.resources という名前の MyType ファイルを検索します。

Visual Studio では、リソース デザイナーによって、既定のカルチャの internal ファイルの基本名と同じ名前の Friend (C# の場合) または (Visual Basic) クラスを定義するコードが自動的に生成されます。 これにより、リソースの名前に対応する型オブジェクトを取得することで、ResourceManager オブジェクトをインスタンス化し、特定のリソース セットと結合することができます。これは、クラスがコンパイラに表示されている限り、リソースも同様である必要があるためです。 たとえば、.resources ファイルに Resource1 という名前が付けられている場合、次のステートメントは、Resource1 という名前の ResourceManager ファイルを管理する オブジェクトをインスタンス化します。

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

Visual Studio を使用していない場合は、名前空間と名前が既定の .resources ファイルと同じ名前のメンバーを持たないクラス 作成できます。 この例では、図を示します。

次の例では、ResourceManager(Type) コンストラクターを使用して、ResourceManager オブジェクトをインスタンス化します。 英語 (en)、フランス語 (フランス) (fr-FR)、ロシア語 (ロシア) (ru-RU) カルチャの .txt ファイルからコンパイルされたリソースで構成されます。 この例では、現在のカルチャと現在の UI カルチャを英語 (米国)、フランス語 (フランス)、ロシア語 (ロシア)、スウェーデン語 (スウェーデン) に変更します。 次に、GetString(String) メソッドを呼び出してローカライズされた文字列を取得します。これにより、時刻に応じてあいさつが表示されます。

この例では、次の表に示すように、3 つのテキスト ベースのリソース ファイルが必要です。 各ファイルには、MorningAfternoon、および Eveningという名前の文字列リソースが含まれています。

文化 ファイル名 リソース名 リソースの値
en-US GreetingResources.txt Morning おはようございます
en-US GreetingResources.txt Afternoon こんにちは
en-US GreetingResources.txt Evening こんばんは
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 Добрый вечер

次のバッチ ファイルを使用して、Visual Basic の例をコンパイルし、Greet.exeという名前の実行可能ファイルを作成できます。 C# でコンパイルするには、コンパイラ名を vbc から csc に変更し、ファイル拡張子を .vb から .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

この例のソース コードを次に示します (Visual Basic バージョンのShowDate.vb、または C# バージョンのコードのShowDate.cs)。

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!

ソース コードは、Exampleという名前のアプリ クラスを定義するだけでなく、リソース ファイルの基本名と同じ名前の GreetingResources内部クラスを定義します。 これにより、ResourceManager コンストラクターを呼び出すことによって、ResourceManager(Type) オブジェクトを正常にインスタンス化できます。

現在の UI カルチャがスウェーデン語 (スウェーデン) の場合を除き、出力には適切なローカライズされた文字列が表示されます。この場合は、英語リソースが使用されます。 スウェーデン語の言語リソースは使用できないため、NeutralResourcesLanguageAttribute 属性で定義されている既定のカルチャのリソースが代わりに使用されます。

適用対象

ResourceManager(String, Assembly)

ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs

指定したアセンブリ内の指定したルート名を持つファイルに含まれるリソースを検索する、 ResourceManager クラスの新しいインスタンスを初期化します。

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)

パラメーター

baseName
String

リソース ファイルのルート名 (拡張子は指定せず、完全修飾名前空間名を含む)。 たとえば、MyApplication.MyResource という名前のリソース ファイルのルート名です。en-US.resources は MyApplication.MyResource です。

assembly
Assembly

リソースのメイン アセンブリ。

例外

baseNameまたはassemblyパラメーターがnull

注釈

デスクトップ アプリ

デスクトップ アプリでは、個々のカルチャ固有のリソース ファイルをサテライト アセンブリに格納し、既定のカルチャのリソース ファイルをメイン アセンブリに含める必要があります。 サテライト アセンブリには、そのアセンブリのマニフェストで指定された 1 つのカルチャのリソースが含まれていると見なされ、必要に応じて読み込まれます。

Note

アセンブリから取得するのではなく、.resources ファイルから直接リソースを取得するには、代わりに CreateFileBasedResourceManager メソッドを呼び出して ResourceManager オブジェクトをインスタンス化する必要があります。

baseName によって識別されたリソース ファイルが assemblyで見つからない場合、メソッドは ResourceManager オブジェクトをインスタンス化しますが、特定のリソースを取得しようとすると、通常は MissingManifestResourceException例外がスローされます。 例外の原因の診断については、ResourceManager クラス トピックの「MissingManifestResourceException 例外の処理」セクションを参照してください。

次の例では、ローカライズされていない単純な "Hello World" アプリを使用して、ResourceManager(String, Assembly) コンストラクターを示します。 ExampleResources.txt という名前のテキスト ファイルの内容が Greeting=Hello。 アプリがコンパイルされると、リソースはメイン アプリ アセンブリに埋め込まれます。

テキスト ファイルは、コマンド プロンプトで次のように リソース ファイル ジェネレーター (ResGen.exe) を使用してバイナリ リソース ファイルに変換できます。

resgen ExampleResources.txt

次の例では、ResourceManager オブジェクトをインスタンス化し、ユーザーに名前の入力を求め、あいさつを表示する実行可能コードを示します。

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!

これは、C# で次のコマンドを使用してコンパイルできます。

csc Example.cs /resource:ExampleResources.resources

この例では、リソース ファイルを含むアセンブリへの参照を取得します。そのアセンブリで定義されている型を (C# の場合) typeof 関数または GetType 関数 (Visual Basic) に渡し、その Type.Assembly プロパティの値を取得します。

注意 (継承者)

このコンストラクターは、システム提供の ResourceSet 実装を使用します。 カスタム リソース ファイル形式を使用するには、 ResourceSet クラスから派生し、 GetDefaultReader() メソッドと GetDefaultWriter() メソッドをオーバーライドし、その型を ResourceManager(String, Assembly, Type) コンストラクターに渡す必要があります。 カスタム ResourceSet を使用すると、リソース キャッシュ ポリシーを制御したり、独自のリソース ファイル形式をサポートしたりするのに役立ちますが、通常は必要ありません。

適用対象

ResourceManager(String, Assembly, Type)

ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs
ソース:
ResourceManager.cs

指定したResourceManager クラスを使用して、指定したアセンブリ内の指定したルート名を持つファイルに含まれるリソースを検索する、ResourceSet クラスの新しいインスタンスを初期化します。

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)

パラメーター

baseName
String

リソース ファイルのルート名 (拡張子は指定せず、完全修飾名前空間名を含む)。 たとえば、MyApplication.MyResource という名前のリソース ファイルのルート名です。en-US.resources は MyApplication.MyResource です。

assembly
Assembly

リソースのメイン アセンブリ。

usingResourceSet
Type

使用するカスタム ResourceSet の種類。 null場合、既定のランタイム ResourceSet オブジェクトが使用されます。

例外

usingResourceSet は、 ResourceSetの派生クラスではありません。

baseNameまたはassemblyパラメーターがnull

注釈

個々のカルチャ固有のリソース ファイルはサテライト アセンブリに含める必要があり、既定のカルチャのリソース ファイルはメイン アセンブリに含める必要があります。 サテライト アセンブリには、そのアセンブリのマニフェストで指定された 1 つのカルチャのリソースが含まれていると見なされ、必要に応じて読み込まれます。

Note

アセンブリからリソースを取得するのではなく、.resources ファイルから直接リソースを取得するには、代わりに CreateFileBasedResourceManager メソッドを呼び出して、 ResourceManager オブジェクトをインスタンス化する必要があります。

baseName によって識別されたリソース ファイルが assemblyで見つからない場合、メソッドは ResourceManager オブジェクトをインスタンス化しますが、特定のリソースを取得しようとすると、通常は MissingManifestResourceException例外がスローされます。 例外の原因の診断については、ResourceManager クラス トピックの「MissingManifestResourceException 例外の処理」セクションを参照してください。

Note

usingResourceSet パラメーターは、独自のリソース形式をサポートするために使用され、一般的にnullされます。 これは、 Type のみを受け取るコンストラクターとは異なります。

注意 (呼び出し元)

このコンストラクターを使用すると、 ResourceSet 実装を指定できます。 特定の ResourceSet 実装が不要で、カスタム リソース ファイル形式を使用する場合は、 ResourceSet クラスから派生し、 GetDefaultReader() メソッドと GetDefaultWriter() メソッドをオーバーライドし、その型をこのコンストラクターに渡す必要があります。

適用対象