Assembly.CreateInstance 메서드

정의

이 어셈블리에서 형식을 찾은 다음 시스템 활성기를 사용하여 해당 형식의 인스턴스를 만듭니다.Locates a type from this assembly and creates an instance of it using the system activator.

오버로드

CreateInstance(String)

대/소문자 구분 검색 기능을 사용하여 이 어셈블리에서 지정된 형식을 찾은 다음 시스템 활성기를 사용하여 해당 형식의 인스턴스를 만듭니다.Locates the specified type from this assembly and creates an instance of it using the system activator, using case-sensitive search.

CreateInstance(String, Boolean)

대/소문자 구분 검색 기능을 선택적으로 사용하여, 지정된 형식을 이 어셈블리에서 찾은 다음 시스템 활성기를 사용하여 해당 인스턴스를 만듭니다.Locates the specified type from this assembly and creates an instance of it using the system activator, with optional case-sensitive search.

CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

대/소문자 구분 검색 기능을 선택적으로 사용하고 지정된 문화권, 인수, 바인딩 및 활성화 특성을 사용하여, 지정된 형식을 이 어셈블리에서 찾은 다음 시스템 활성기를 사용하여 해당 인스턴스를 만듭니다.Locates the specified type from this assembly and creates an instance of it using the system activator, with optional case-sensitive search and having the specified culture, arguments, and binding and activation attributes.

CreateInstance(String)

대/소문자 구분 검색 기능을 사용하여 이 어셈블리에서 지정된 형식을 찾은 다음 시스템 활성기를 사용하여 해당 형식의 인스턴스를 만듭니다.Locates the specified type from this assembly and creates an instance of it using the system activator, using case-sensitive search.

public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName);
public object CreateInstance (string typeName);
abstract member CreateInstance : string -> obj
override this.CreateInstance : string -> obj
Public Function CreateInstance (typeName As String) As Object

매개 변수

typeName
String

찾을 형식의 FullName입니다.The FullName of the type to locate.

반환

괄호가 없는 생성자로 만든 지정된 형식의 인스턴스입니다. 또는 typeName을 찾을 수 없는 경우 null입니다.An instance of the specified type created with the parameterless constructor; or null if typeName is not found. 형식은 문화권 또는 활성화 특성을 지정하지 않고 BindingFlagsPublic 또는 Instance로 설정하여 기본 바인더를 사용하여 확인됩니다.The type is resolved using the default binder, without specifying culture or activation attributes, and with BindingFlags set to Public or Instance.

구현

예외

typeName이 빈 문자열("") 또는 null 문자로 시작하는 문자열입니다.typeName is an empty string ("") or a string beginning with a null character.

또는-or- 현재 어셈블리가 리플렉션 전용 컨텍스트에 로드되었습니다.The current assembly was loaded into the reflection-only context.

typeNamenull입니다.typeName is null.

일치하는 생성자를 찾을 수 없습니다.No matching constructor was found.

typeName에 종속 어셈블리가 필요하지만 이 어셈블리를 찾을 수 없습니다.typeName requires a dependent assembly that could not be found.

typeName에 종속 어셈블리가 필요하며 이 어셈블리를 찾았지만 로드할 수 없습니다.typeName requires a dependent assembly that was found but could not be loaded.

또는-or- 현재 어셈블리가 리플렉션 전용 컨텍스트에 로드되었으며 typeName에 종속 어셈블리가 필요하지만 이 어셈블리가 미리 로드되지 않았습니다.The current assembly was loaded into the reflection-only context, and typeName requires a dependent assembly that was not preloaded.

typeName에 종속 어셈블리가 필요하지만 파일이 유효한 어셈블리가 아닙니다.typeName requires a dependent assembly, but the file is not a valid assembly.

또는-or- typeName에 현재 로드된 버전보다 높은 런타임 버전용으로 컴파일된 종속 어셈블리가 필요합니다.typeName requires a dependent assembly that was compiled for a version of the runtime that is later than the currently loaded version.

예제

다음 예제에서는 Person 클래스를 정의 하 고 CreateInstance(String) 메서드를 호출 하 여 해당 클래스를 인스턴스화합니다.The following example defines a Person class and calls the CreateInstance(String) method to instantiate it.

using System;
using System.Reflection;
using Contoso.Libraries;

namespace Contoso.Libraries
{
   public class Person
   {
      private string _name;
   
      public Person()
      { }
   
      public Person(string name)
      {
         this._name = name;
      }
   
      public string Name
      { get { return this._name; }
        set { this._name = value; } }
   
      public override string ToString()
      {
         return this._name;
      }
   }
}

public class Example
{
   public static void Main()
   {
      Assembly assem = typeof(Person).Assembly;
      Person p = (Person) assem.CreateInstance("Contoso.Libraries.Person");
      if (! (p == null)) {
         p.Name = "John";
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p);
      }
      else {
         Console.WriteLine("Unable to instantiate a Person object.");
      }   
   }
}
// The example displays the following output:
//        Instantiated a Person object whose value is 'John'
Imports System.Reflection
Imports Contoso.Libraries

Namespace Contoso.Libraries
   Public Class Person
      Private _name As String 
   
      Public Sub New()
      End Sub 
   
      Public Sub New(name As String)
         Me._name = name
      End Sub 
   
      Public Property Name As String 
         Get 
            Return Me._name
         End Get 
         Set 
            Me._name = value
         End Set 
      End Property 
   
      Public Overrides Function ToString() As String 
         Return Me._name
      End Function 
   End Class
End Namespace 

Module Example
   Public Sub Main()
      Dim assem As Assembly = GetType(Person).Assembly
      Dim p As Person = CType(assem.CreateInstance("Contoso.Libraries.Person"),
                              Person)
      If p IsNot Nothing Then
         p.Name = "John"
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p)
      Else
         Console.WriteLine("Unable to instantiate a Person object.")
      End If   
   End Sub
End Module
' The example displays the following output:
'       Instantiated a Person object whose value is 'John'

설명

런타임이 Assembly 인스턴스에서 typeName를 찾을 수 없는 경우 예외를 throw 하는 대신 null를 반환 합니다.If the runtime is unable to find typeName in the Assembly instance, it returns null instead of throwing an exception. 이 문제는 다음과 같은 경우에 발생할 수 있습니다.This might happen because:

  • 형식의 정규화 된 이름을 지정 하지 않았습니다.You haven't specified the fully qualified name of the type.

  • 정규화 된 형식 이름을 지정 했지만 해당 사례가 형식의 Type.FullName 속성의 대/소문자와 일치 하지 않습니다.You've specified the fully qualified type name, but its case doesn't match the case of the type's Type.FullName property. 대/소문자를 구분 하지 않는 형식의 전체 이름을 사용 하는 typeName 비교를 위해 CreateInstance(String, Boolean) 오버 로드를 호출 하 고 ignoreCase 인수에 대해 true를 지정 합니다.For a case-insensitive comparison of typeName with the type's full name, call the CreateInstance(String, Boolean) overload and specify true for the ignoreCase argument.

  • 현재 Assembly 인스턴스에 형식이 없는 경우The type doesn't exist in the current Assembly instance.

보안

ReflectionPermission
호출 될 때 런타임에 바인딩된 메커니즘을 통해 같은 InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])합니다.when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). 연결 된 열거형: MemberAccessAssociated enumeration: MemberAccess

CreateInstance(String, Boolean)

대/소문자 구분 검색 기능을 선택적으로 사용하여, 지정된 형식을 이 어셈블리에서 찾은 다음 시스템 활성기를 사용하여 해당 인스턴스를 만듭니다.Locates the specified type from this assembly and creates an instance of it using the system activator, with optional case-sensitive search.

public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase);
public object CreateInstance (string typeName, bool ignoreCase);
abstract member CreateInstance : string * bool -> obj
override this.CreateInstance : string * bool -> obj
Public Function CreateInstance (typeName As String, ignoreCase As Boolean) As Object

매개 변수

typeName
String

찾을 형식의 FullName입니다.The FullName of the type to locate.

ignoreCase
Boolean

형식 이름의 대/소문자를 무시하면 true이고, 그러지 않으면 false입니다.true to ignore the case of the type name; otherwise, false.

반환

괄호가 없는 생성자로 만든 지정된 형식의 인스턴스입니다. 또는 typeName을 찾을 수 없는 경우 null입니다.An instance of the specified type created with the parameterless constructor; or null if typeName is not found. 형식은 문화권 또는 활성화 특성을 지정하지 않고 BindingFlagsPublic 또는 Instance로 설정하여 기본 바인더를 사용하여 확인됩니다.The type is resolved using the default binder, without specifying culture or activation attributes, and with BindingFlags set to Public or Instance.

구현

예외

typeName이 빈 문자열("") 또는 null 문자로 시작하는 문자열입니다.typeName is an empty string ("") or a string beginning with a null character.

또는-or- 현재 어셈블리가 리플렉션 전용 컨텍스트에 로드되었습니다.The current assembly was loaded into the reflection-only context.

일치하는 생성자를 찾을 수 없습니다.No matching constructor was found.

typeNamenull인 경우typeName is null.

typeName에 종속 어셈블리가 필요하지만 이 어셈블리를 찾을 수 없습니다.typeName requires a dependent assembly that could not be found.

typeName에 종속 어셈블리가 필요하며 이 어셈블리를 찾았지만 로드할 수 없습니다.typeName requires a dependent assembly that was found but could not be loaded.

또는-or- 현재 어셈블리가 리플렉션 전용 컨텍스트에 로드되었으며 typeName에 종속 어셈블리가 필요하지만 이 어셈블리가 미리 로드되지 않았습니다.The current assembly was loaded into the reflection-only context, and typeName requires a dependent assembly that was not preloaded.

typeName에 종속 어셈블리가 필요하지만 파일이 유효한 어셈블리가 아닙니다.typeName requires a dependent assembly, but the file is not a valid assembly.

또는-or- typeName에 현재 로드된 버전보다 높은 런타임 버전용으로 컴파일된 종속 어셈블리가 필요합니다.typeName requires a dependent assembly that was compiled for a version of the runtime that is later than the currently loaded version.

예제

다음 예제에서는 Person 클래스를 정의 합니다.The following example defines a Person class. 그런 다음 CreateInstance(String) 메서드를 호출 하 여이를 인스턴스화합니다. 하지만 typeName 인수의 대/소문자가 형식의 FullName 속성과 일치 하지 않기 때문에 메서드는 null을 반환 합니다.It then calls the CreateInstance(String) method to instantiate it, but because the casing of the typeName argument doesn't match that of the type's FullName property, the method returns null. 예제가 CreateInstance(String, Boolean) 오버 로드에 동일한 문자열을 전달 하 고 비교에서 대/소문자를 구분 하지 않도록 지정 하 고, Person 클래스를 찾아 Person 개체가 성공적으로 인스턴스화됩니다.When the example passes the same string to the CreateInstance(String, Boolean) overload and specifies that the comparison should be case-insensitive, the Person class is found, and a Person object is successfully instantiated.

using System;
using System.Reflection;
using Contoso.Libraries;

namespace Contoso.Libraries
{
   public class Person
   {
      private string _name;
   
      public Person()
      { }
   
      public Person(string name)
      {
         this._name = name;
      }
   
      public string Name
      { get { return this._name; }
        set { this._name = value; } }
   
      public override string ToString()
      {
         return this._name;
      }
   }
}

public class Example
{
   public static void Main()
   {
      String fullName = "contoso.libraries.person";
      Assembly assem = typeof(Person).Assembly;
      Person p = (Person) assem.CreateInstance(fullName);
      if (! (p == null)) {
         p.Name = "John";
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p);
      }
      else {
         Console.WriteLine("Unable to instantiate a Person object " +
                           "with Assembly.CreateInstance(String)");
         // Try case-insensitive type name comparison.
         p = (Person) assem.CreateInstance(fullName, true);
         if (! (p == null)) {
            p.Name = "John";
            Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                              p.GetType().Name, p);
         }
         else {
            Console.WriteLine("Unable to instantiate a {0} object.", 
                              fullName);
         }   
      }   
   }
}
// The example displays the following output:
//    Unable to instantiate a Person object with Assembly.CreateInstance(String)
//    Instantiated a Person object whose value is 'John'
Imports System.Reflection
Imports Contoso.Libraries

Namespace Contoso.Libraries
   Public Class Person
      Private _name As String 
   
      Public Sub New()
      End Sub 
   
      Public Sub New(name As String)
         Me._name = name
      End Sub 
   
      Public Property Name As String 
         Get 
            Return Me._name
         End Get 
         Set 
            Me._name = value
         End Set 
      End Property 
   
      Public Overrides Function ToString() As String 
         Return Me._name
      End Function 
   End Class
End Namespace 

Module Example
   Public Sub Main()
      Dim fullName As String = "contoso.libraries.person"
      Dim assem As Assembly = GetType(Person).Assembly
      Dim p As Person = CType(assem.CreateInstance(fullName),
                              Person)
      If p IsNot Nothing Then
         p.Name = "John"
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p)
      Else
         Console.WriteLine("Unable to instantiate a Person object" +
                           "with Assembly.CreateInstance(String)")
         ' Try case-insensitive type name comparison.
         p = CType(assem.CreateInstance(fullName, true), Person)
         If p IsNot Nothing Then 
            p.Name = "John"
            Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                              p.GetType().Name, p)
         Else 
            Console.WriteLine("Unable to instantiate a {0} object.", 
                              fullName)
         End If   
      End If   
   End Sub
End Module
' The example displays the following output:
'    Unable to instantiate a Person object with Assembly.CreateInstance(String)
'    Instantiated a Person object whose value is 'John'

설명

런타임이 Assembly 인스턴스에서 typeName를 찾을 수 없는 경우 예외를 throw 하는 대신 null를 반환 합니다.If the runtime is unable to find typeName in the Assembly instance, it returns null instead of throwing an exception. 이 문제는 다음과 같은 경우에 발생할 수 있습니다.This might happen because:

  • 형식의 정규화 된 이름을 지정 하지 않았습니다.You haven't specified the fully qualified name of the type.

  • 현재 Assembly 인스턴스에 형식이 없는 경우The type doesn't exist in the current Assembly instance.

보안

ReflectionPermission
호출 될 때 런타임에 바인딩된 메커니즘을 통해 같은 InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])합니다.when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). 연결 된 열거형: MemberAccessAssociated enumeration: MemberAccess

CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

대/소문자 구분 검색 기능을 선택적으로 사용하고 지정된 문화권, 인수, 바인딩 및 활성화 특성을 사용하여, 지정된 형식을 이 어셈블리에서 찾은 다음 시스템 활성기를 사용하여 해당 인스턴스를 만듭니다.Locates the specified type from this assembly and creates an instance of it using the system activator, with optional case-sensitive search and having the specified culture, arguments, and binding and activation attributes.

public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
public object CreateInstance (string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
abstract member CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
override this.CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj

매개 변수

typeName
String

찾을 형식의 FullName입니다.The FullName of the type to locate.

ignoreCase
Boolean

형식 이름의 대/소문자를 무시하면 true이고, 그러지 않으면 false입니다.true to ignore the case of the type name; otherwise, false.

bindingAttr
BindingFlags

검색 수행 방법에 영향을 주는 비트 마스크입니다.A bitmask that affects the way in which the search is conducted. 이 값은 BindingFlags의 비트 플래그 조합입니다.The value is a combination of bit flags from BindingFlags.

binder
Binder

리플렉션을 사용하여 바인딩, 인수 형식의 강제 변환, 멤버 호출 및 MemberInfo 개체 검색을 사용할 수 있도록 하는 개체입니다.An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects via reflection. bindernull이면 기본 바인더가 사용됩니다.If binder is null, the default binder is used.

args
Object[]

생성자에 전달되는 인수를 포함하는 배열입니다.An array that contains the arguments to be passed to the constructor. 이 인수 배열은 실행될 생성자의 매개 변수와 개수, 순서 및 형식이 일치해야 합니다.This array of arguments must match in number, order, and type the parameters of the constructor to be invoked. 매개 변수가 없는 생성자가 필요한 경우 args가 빈 배열이거나 null이어야 합니다.If the parameterless constructor is desired, args must be an empty array or null.

culture
CultureInfo

형식의 강제 변환을 제어하는 데 사용되는 CultureInfo의 인스턴스입니다.An instance of CultureInfo used to govern the coercion of types. 이 매개 변수가 null이면 현재 스레드에 대한 CultureInfo가 사용됩니다.If this is null, the CultureInfo for the current thread is used. 예를 들어 1,000은 각 문화권마다 다르게 표현되므로 1,000을 나타내는 StringDouble 값으로 변환하기 위해 이 매개 변수가 필요합니다.(This is necessary to convert a String that represents 1000 to a Double value, for example, since 1000 is represented differently by different cultures.)

activationAttributes
Object[]

활성화할 수 있는 하나 이상의 특성으로 이루어진 배열입니다.An array of one or more attributes that can participate in activation. 일반적으로, 원격 개체를 활성화하는 데 필요한 URL을 지정하는 단일 UrlAttribute 개체가 포함된 배열입니다.Typically, an array that contains a single UrlAttribute object that specifies the URL that is required to activate a remote object. 이 매개 변수는 클라이언트 활성 개체와 관련되어 있습니다.This parameter is related to client-activated objects. 클라이언트 활성화는 이전 버전과의 호환성을 위해 유지되지만 새로운 개발에는 권장되지 않는 레거시 기술입니다.Client activation is a legacy technology that is retained for backward compatibility but is not recommended for new development. 분산된 애플리케이션은 Windows Communication Foundation을 사용해야 합니다.Distributed applications should instead use Windows Communication Foundation.

반환

지정된 형식의 인스턴스 또는 null이 없으면 typeName입니다.An instance of the specified type, or null if typeName is not found. 제공된 인수는 형식을 확인하고 인스턴스를 만드는 데 사용된 생성자를 바인딩하는 데 사용됩니다.The supplied arguments are used to resolve the type, and to bind the constructor that is used to create the instance.

구현

예외

typeName이 빈 문자열("") 또는 null 문자로 시작하는 문자열입니다.typeName is an empty string ("") or a string beginning with a null character.

또는-or- 현재 어셈블리가 리플렉션 전용 컨텍스트에 로드되었습니다.The current assembly was loaded into the reflection-only context.

typeNamenull입니다.typeName is null.

일치하는 생성자를 찾을 수 없습니다.No matching constructor was found.

비어 있지 않은 활성화 특성 배열이 MarshalByRefObject에서 상속되지 않는 형식에 전달됩니다.A non-empty activation attributes array is passed to a type that does not inherit from MarshalByRefObject.

typeName에 종속 어셈블리가 필요하지만 이 어셈블리를 찾을 수 없습니다.typeName requires a dependent assembly that could not be found.

typeName에 종속 어셈블리가 필요하며 이 어셈블리를 찾았지만 로드할 수 없습니다.typeName requires a dependent assembly that was found but could not be loaded.

또는-or- 현재 어셈블리가 리플렉션 전용 컨텍스트에 로드되었으며 typeName에 종속 어셈블리가 필요하지만 이 어셈블리가 미리 로드되지 않았습니다.The current assembly was loaded into the reflection-only context, and typeName requires a dependent assembly that was not preloaded.

typeName에 종속 어셈블리가 필요하지만 파일이 유효한 어셈블리가 아닙니다.typeName requires a dependent assembly, but the file is not a valid assembly.

또는-or- typeName에 현재 로드된 버전보다 높은 런타임 버전용으로 컴파일된 종속 어셈블리가 필요합니다.typeName requires a dependent assembly which that was compiled for a version of the runtime that is later than the currently loaded version.

보안

ReflectionPermission
호출 될 때 런타임에 바인딩된 메커니즘을 통해 같은 InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])합니다.when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). 연결 된 열거형: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
대리자의 인스턴스를 만듭니다.to create an instance of a delegate. 연결 된 열거형: UnmanagedCodeAssociated enumeration: UnmanagedCode

적용 대상