Activator.CreateInstance 란?
지정한 매개 변수와 가장 일치하는 생성자를 사용하여 지정한 유형의 인스턴스를 만듭니다.
Activator.CreateInstance(Type type, object[] params) 와 같이 되어 있습니다.
경험
업무를 하다 보면, 동적으로 User Control(object, Class, T..)를 생성해야 할 때가 있습니다. 이때 내가 Control의 Type 정보를 알고 있다면, 동적으로 생성할 방법을 알려드리겠습니다.
1.생성자에 매개변수가 없는 경우
public void Run()
{
Type tmpType = typeof(PopupContent);
//Type을 이용해 동적으로 Object를 생성
var std = Activator.CreateInstance(tmpType);
}
/*******************************************************/
public class PopupContent
{
public PopupContent()
{
Console.WriteLine("My Dictionary 블로그에 오신 걸 환영합니다.");
}
}
2.생성자에 매개변수가 있는 경우
public void Run()
{
Type tmpType = typeof(PopupContent);
//매개변수가 있을경우, type 옆에 , 붙여 추가해 준다.
var std = Activator.CreateInstance(tmpType,
"My Dictionary 블로그에 오신 걸 환영합니다.", 3 );
}
/*******************************************************/
public class PopupContent
{
public PopupContent(string message, int cnt)
{
for(int i =0; i < cnt; i++)
{
Console.WriteLine(message);
}
}
}
결과
My Dictionary 블로그에 오신 걸 환영합니다.
My Dictionary 블로그에 오신 걸 환영합니다.
My Dictionary 블로그에 오신 걸 환영합니다.
응용 Generic Class를 동적으로 생성하기
public void Run()
{
CreateClass< PopupContent>("My Dictionary 블로그에 오신 걸 환영합니다.", 2 );
}
//Generic Method
public void CreateClass<T>(string msg, int cnt)
{
//간단하게 앞에 (T)로 캐스팅만 해주면 됩니다!
var cls = (T) Activator.CreateInstance(typeof(T), msg, cnt);
}
/*******************************************************/
public class PopupContent
{
public PopupContent(string message, int cnt)
{
for(int i =0; i < cnt; i++)
{
Console.WriteLine(message);
}
}
}
결과
My Dictionary 블로그에 오신 걸 환영합니다.
My Dictionary 블로그에 오신 걸 환영합니다.
'C# 문법' 카테고리의 다른 글
[C#] Stopwatch를 이용해 경과시간 가져오기 (0) | 2021.12.16 |
---|---|
[C#] IP, SubnetMask, Gateway 정보 가져오기 (0) | 2021.12.15 |
[C#] Reflection을 이용하여 동적으로 값을 넣기 (0) | 2021.12.13 |
[C#] Linq에서 값이 존재하는지 확인, Any, ALL, Exist (0) | 2021.12.08 |
[C#] XML Serialization / Deserialization (0) | 2021.12.05 |