ResourceManager 생성자

정의

ResourceManager 클래스의 새 인스턴스를 초기화합니다.

오버로드

Name Description
ResourceManager()

기본값을 사용하여 클래스의 새 인스턴스를 ResourceManager 초기화합니다.

ResourceManager(Type)

지정된 형식 개체의 ResourceManager 정보를 기반으로 위성 어셈블리에서 리소스를 조회하는 클래스의 새 인스턴스를 초기화합니다.

ResourceManager(String, Assembly)

지정된 어셈블리에서 ResourceManager 지정된 루트 이름을 가진 파일에 포함된 리소스를 조회하는 클래스의 새 인스턴스를 초기화합니다.

ResourceManager(String, Assembly, Type)

지정된 클래스를 사용하여 지정된 어셈블리에서 ResourceManager 지정된 ResourceSet 루트 이름을 가진 파일에 포함된 리소스를 조회하는 클래스의 새 인스턴스를 초기화합니다.

ResourceManager()

Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs

기본값을 사용하여 클래스의 새 인스턴스를 ResourceManager 초기화합니다.

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

설명

이 생성자는 클래스에서 ResourceManager 파생되는 고유한 클래스를 작성하는 경우에만 유용합니다.

적용 대상

ResourceManager(Type)

Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
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인 경우 다음 문은 ResourceManager 개체를 인스턴스화하여 Resource1이라는 .resources 파일을 관리합니다.

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

Visual Studio를 사용하지 않는 경우 네임스페이스와 이름이 기본 .resources 파일과 동일한 멤버가 없는 클래스를 만들 수 있습니다. 이 예제에서는 그림을 제공합니다.

Example

다음 예제에서는 ResourceManager(Type) 생성자를 사용하여 ResourceManager 개체를 인스턴스화합니다. 영어(en), 프랑스어(프랑스) (fr-FR) 및 러시아어(러시아)(ru-RU) 문화권에 대한 .txt 파일에서 컴파일된 리소스로 구성됩니다. 이 예제에서는 현재 문화권과 현재 UI 문화권을 영어(미국), 프랑스어(프랑스), 러시아어(러시아) 및 스웨덴어(스웨덴)로 변경합니다. 그런 다음 GetString(String) 메서드를 호출하여 현지화된 문자열을 검색합니다. 이 문자열은 하루 중 시간에 따라 인사말을 표시합니다.

이 예제에서는 다음 표에 나열된 대로 세 개의 텍스트 기반 리소스 파일이 필요합니다. 각 파일에는 Morning, AfternoonEvening문자열 리소스가 포함됩니다.

Culture 파일 이름 리소스 이름 리소스 값
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 안녕하세요 좋은 저녁입니다
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#으로 컴파일하려면 컴파일러 이름을 vbccsc, 파일 확장명을 .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)

Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
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.

설명

데스크톱 앱

데스크톱 앱에서 개별 문화권별 리소스 파일은 위성 어셈블리에 포함되어야 하며 기본 문화권의 리소스 파일은 주 어셈블리에 포함되어야 합니다. 위성 어셈블리는 해당 어셈블리의 매니페스트에 지정된 단일 문화권에 대한 리소스를 포함하는 것으로 간주되며 필요에 따라 로드됩니다.

메모

어셈블리에서 리소스를 검색하는 대신 .resources 파일에서 직접 리소스를 검색하려면 CreateFileBasedResourceManager 개체를 인스턴스화하는 대신 ResourceManager 메서드를 호출해야 합니다.

baseName 식별된 리소스 파일을 assembly찾을 수 없는 경우 메서드는 ResourceManager 개체를 인스턴스화하지만 특정 리소스를 검색하려고 하면 예외가 발생하며 일반적으로 MissingManifestResourceException. 예외의 원인을 진단하는 방법에 대한 자세한 내용은 ResourceManager 클래스 항목의 "MissingManifestResourceException 예외 처리" 섹션을 참조하세요.

Example

다음 예제에서는 지역화되지 않은 간단한 "헬로 월드" 앱을 사용하여 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

이 예제에서는 해당 어셈블리에 정의된 형식을 typeof 함수(C#) 또는 GetType 함수(Visual Basic)에 전달하고 해당 Type.Assembly 속성의 값을 검색하여 리소스 파일이 포함된 어셈블리에 대한 참조를 검색합니다.

상속자 참고

이 생성자는 시스템 제공 구현을 ResourceSet 사용합니다. 사용자 지정 리소스 파일 형식을 사용하려면 클래스에서 ResourceSet 파생하고, 및 메서드를 재정의 GetDefaultReader() 하고 GetDefaultWriter() , 해당 형식을 ResourceManager(String, Assembly, Type) 생성자에 전달해야 합니다. 사용자 지정 ResourceSet 을 사용하면 리소스 캐싱 정책을 제어하거나 고유한 리소스 파일 형식을 지원하는 데 유용할 수 있지만 일반적으로 필요하지는 않습니다.

적용 대상

ResourceManager(String, Assembly, Type)

Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
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.

설명

개별 문화권별 리소스 파일은 위성 어셈블리에 포함되어야 하며 기본 문화권의 리소스 파일은 주 어셈블리에 포함되어야 합니다. 위성 어셈블리는 해당 어셈블리의 매니페스트에 지정된 단일 문화권에 대한 리소스를 포함하는 것으로 간주되며 필요에 따라 로드됩니다.

메모

어셈블리에서 리소스를 검색하는 대신 .resources 파일에서 직접 리소스를 검색하려면 개체를 인스턴스화하는 대신 메서드를 CreateFileBasedResourceManager 호출 ResourceManager 해야 합니다.

baseName 식별된 리소스 파일을 assembly찾을 수 없는 경우 메서드는 ResourceManager 개체를 인스턴스화하지만 특정 리소스를 검색하려고 하면 예외가 발생하며 일반적으로 MissingManifestResourceException. 예외의 원인을 진단하는 방법에 대한 자세한 내용은 ResourceManager 클래스 항목의 "MissingManifestResourceException 예외 처리" 섹션을 참조하세요.

메모

usingResourceSet 매개 변수는 사용자 고유의 리소스 형식을 지원하는 데 사용되며 일반적으로 다음과 같습니다null. 이는 유일한 생성자를 사용하는 Type 생성자와 다릅니다.

호출자 참고

이 생성자를 사용하여 구현을 지정할 수 있습니다 ResourceSet . 특정 ResourceSet 구현을 원하지 않지만 사용자 지정 리소스 파일 형식을 사용하려는 경우 클래스에서 파생되고, 재정의 ResourceSet 되고, 메서드를 재정의 GetDefaultReader() 하고 GetDefaultWriter() , 해당 형식을 이 생성자에 전달해야 합니다.

적용 대상