ResourceManager 생성자

정의

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

오버로드

ResourceManager()

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

ResourceManager(Type)

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

ResourceManager(String, Assembly)

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

ResourceManager(String, Assembly, Type)

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

ResourceManager()

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

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

설명

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

적용 대상

ResourceManager(Type)

지정된 형색 개체의 정보를 기초로 위성 어셈블리에서 리소스를 찾는 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인 경우

예제

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

이 예제에는 다음 표에 나열된 대로 세 개의 텍스트 기반 리소스 파일이 필요합니다. 각 파일에는 이름이 인 Morning``Afternoon문자열 리소스 및 Evening.

문화권 파일 이름 리소스 이름 리소스 값
ko-KR GreetingResources.txt Morning 안녕하세요.
ko-KR GreetingResources.txt Afternoon 안녕하세요
ko-KR 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#으로 컴파일하려면 컴파일러 이름을 다음으로 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 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!

소스 코드는 명명 Example된 앱 클래스를 정의하는 것 외에도 리소스 파일의 기본 이름과 GreetingResources이름이 같은 내부 클래스를 정의합니다. 이렇게 하면 생성자를 호출하여 개체를 ResourceManager 성공적으로 인스턴스화할 수 ResourceManager(Type) 있습니다.

현재 UI 문화권이 스웨덴어(스웨덴)이면 영어 리소스를 사용하는 경우를 제외하고 출력에 적절한 지역화된 문자열이 표시됩니다. 스웨덴어 언어 리소스를 사용할 수 없으므로 앱은 특성에 정의된 NeutralResourcesLanguageAttribute 기본 문화권의 리소스를 대신 사용합니다.

설명

데스크톱 앱

데스크톱 앱에서 리소스 관리자는 매개 변수를 resourceSource 사용하여 다음과 같이 특정 리소스 파일을 로드합니다.

  • NeutralResourcesLanguageAttribute 기본 문화권의 리소스가 위성 어셈블리에 상주함을 나타내는 데 특성을 사용하지 않는 경우 Resource Manager는 기본 문화권의 리소스 파일이 매개 변수에 지정된 resourceSource 형식과 동일한 어셈블리에 있다고 가정합니다.

  • 리소스 관리자는 기본 리소스 파일의 기본 이름이 매개 변수에 지정된 resourceSource 형식과 동일하다고 가정합니다.

  • 리소스 관리자는 기본 ResourceSet 클래스를 사용하여 리소스 파일을 조작합니다.

예를 들어 MyCompany.MyProduct.MyType이라는 형식이 지정된 경우 리소스 관리자는 MyType을 정의하는 어셈블리에서 MyCompany.MyProduct.MyType.resources라는 .resources 파일을 찾습니다.

Visual Studio 리소스 디자이너는 기본 문화권에 대한 .resources internal 파일의 기본 이름과 이름이 같은 (C#) 또는 Friend (Visual Basic) 클래스를 정의하는 코드를 자동으로 생성합니다. 이렇게 하면 클래스가 컴파일러에 표시되는 한 리소스도 표시되어야 하므로 이름이 리소스 이름에 해당하는 형식 개체를 가져오면 개체를 인스턴스화 ResourceManager 하고 특정 리소스 집합과 결합할 수 있습니다. 예를 들어 .resources 파일의 이름이 Resource1이면 다음 문은 개체를 ResourceManager 인스턴스화하여 Resource1이라는 .resources 파일을 관리합니다.

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

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

Windows 8.x 앱

중요

클래스는 ResourceManager Windows 8.x 앱에서 지원되지만 사용하지 않는 것이 좋습니다. Windows 8.x 앱에서 사용할 수 있는 이식 가능한 클래스 라이브러리 프로젝트를 개발하는 경우에만 이 클래스를 사용합니다. Windows 8.x 앱에서 리소스를 검색하려면 Windows 사용합니다. 대신 ApplicationModel.Resources.ResourceLoader 클래스입니다.

Windows 8.x 앱 ResourceManager 에서 매개 변수를 사용하여 resourceSource 어셈블리, 기본 이름 및 리소스 항목을 앱의 PRI(패키지 리소스 인덱스) 파일 내에 배치할 수 있는 네임스페이스를 유추합니다. 예를 들어 정의된 MyCompany.MyProduct.MyType 형식이 MyAssembly지정된 경우 리소스 관리자는 MyAssembly라는 리소스 집합 식별자를 찾고 해당 리소스 집합 내에서 MyCompany.MyProduct.MyType 범위를 찾습니다. 리소스 관리자는 이 범위 내에서 기본 컨텍스트(현재 문화권, 현재 고대비 설정 등)에서 리소스 항목을 검색합니다.

적용 대상

ResourceManager(String, Assembly)

지정된 어셈블리에서 지정된 루트 이름에서 파생된 파일에 포함된 리소스를 찾는 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인 경우

예제

다음 예제에서는 지역화되지 않은 간단한 "헬로 월드" 앱을 사용하여 생성자를 보여 ResourceManager(String, Assembly) 줍니다. 다음은 ExampleResources.txt 텍스트 파일의 내용을 보여 줍니다. 앱이 컴파일되면 리소스가 주 앱 어셈블리에 포함됩니다.

Greeting=Hello

다음과 같이 명령 프롬프트에서 리소스 파일 생성기(ResGen.exe) 를 사용하여 텍스트 파일을 이진 리소스 파일로 변환할 수 있습니다.

resgen ExampleResources.txt

다음 예제에서는 개체를 인스턴스화 ResourceManager 하고 사용자에게 이름을 입력하라는 메시지를 표시하고 인사말을 표시하는 실행 코드를 제공합니다.

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!

Visual Basic 다음 명령을 사용하여 컴파일할 수 있습니다.

vbc Example.vb /resource:ExampleResources.resources

또는 C#에서 다음 명령을 사용합니다.

csc Example.cs /resource:ExampleResources.resources

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

설명

데스크톱 앱

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

참고

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

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

Windows 8.x 앱

중요

클래스는 ResourceManager Windows 8.x 앱에서 지원되지만 사용하지 않는 것이 좋습니다. Windows 8.x 앱에서 사용할 수 있는 이식 가능한 클래스 라이브러리 프로젝트를 개발하는 경우에만 이 클래스를 사용합니다. Windows 8.x 앱에서 리소스를 검색하려면 Windows 사용합니다. 대신 ApplicationModel.Resources.ResourceLoader 클래스입니다.

Windows 8.x 앱에서 리소스 관리자는 매개 변수의 assembly 간단한 이름을 사용하여 앱의 PRI(패키지 리소스 인덱스) 파일에서 일치하는 리소스 집합을 조회합니다. 매개 baseName 변수는 리소스 집합 내에서 리소스 항목을 조회하는 데 사용됩니다. 예를 들어 PortableLibrary1.Resource1.de-DE.resources의 루트 이름은 PortableLibrary1.Resource1입니다.

상속자 참고

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

적용 대상

ResourceManager(String, Assembly, Type)

지정된 어셈블리에서 지정된 루트 이름의 파일에 포함된 리소스를 찾는 데 지정된 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 개체가 사용됩니다.

예외

usingResourcesetResourceSet의 파생 클래스가 아닌 경우

baseName 또는 assembly 매개 변수가 null인 경우

설명

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

참고

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

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

참고

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

호출자 참고

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

적용 대상