๐ ๋ฆฌํ๋ ์ (Reflection)
- ๊ฐ์ฒด๋ฅผ X-Ray ์ฌ์ง์ฒ๋ผ ๊ฐ์ฒด์ ํ์(Type)์ ๋ณด๋ฅผ ๋ค์ฌ๋ค๋ณด๋ ๊ธฐ๋ฅ์ด๋ค.
- ๊ฐ์ฒด์ ํ์์ด๋ฆ, ํ๋กํผํฐ ๋ชฉ๋ก, ๋ฉ์๋ ๋ชฉ๋ก, ํ๋, ์ด๋ฒคํธ ๋ชฉ๋ก๊น์ง ๋ฐํ์์ ํ์์ ๋ณด๋ฅผ ๋ชจ๋ ์ด์ด๋ณผ ์ ์๋ค.
- ์ด๋ฌํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ํน์ ํ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
- Activator.CreateInstance(Type type) ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ ๋ ฅ๋ฐ์ ํ์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค.
CreateInstance(Type type)
ํด๋น ํ์์ ๋งค๊ฐ ๋ณ์๊ฐ ์๋ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ ํ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ญ๋๋ค. -MSDN ์ฐธ๊ณ -
๐ ์์ ํผ ๋์ฐ๊ธฐ
AssemblyName๊ณผ TypeName์ ๊ฐ์ง๊ณ ์์ ํผ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ํ๋ฉด์ ๋์์ค๋ค.
1. Assembly๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
Assembly assembly = Assembly.Load(assemblyName);
Load(AssemblyName assemblyName)
ํด๋น AssemblyName์ด ์ง์ ๋ ์ด์
๋ธ๋ฆฌ๋ฅผ ๋ก๋ํฉ๋๋ค.
// AssemblyName์ ํด๋น ์ด์
๋ธ๋ฆฌ์ ๋ฐ์ธ๋ฉํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ ์ด์
๋ธ๋ฆฌ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
2. ํด๋น Assembly๊ฐ์ฒด์ ํ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
Type type = assembly.GetType(typeName);
GetType(String string)
์ด์
๋ธ๋ฆฌ ์ธ์คํด์ค์์ ์ง์ ๋ ์ด๋ฆ์ ๊ฐ์ง Type ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
3. Activator.CreateInstance(type)์ ์ฌ์ฉํด ์ ๋ ฅ๋ฐ์ ํ์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ํ๋ฉด์ ๋์์ค๋ค.
BaseMdiChildForm childForm = (BaseMdiChildForm)Activator.CreateInstance(type);
childForm.MdiParent = this;
childForm.Show();
Activator.CreateInstance(Type type)
object๋ก ๋ฐํํ๊ธฐ ๋๋ฌธ์ ํ๋ณํ ํด์ค๋ค.
๐ ์์
// ์์ํผ ์ด๊ธฐ
OpenForm("MdiProject", "MdiProject.Frm0001");
// OpenForm()
private void OpenForm(string assemblyName, string typeName)
{
Assembly assembly = Assembly.Load(assemblyName);
Type type = assembly.GetType(typeName);
var childForm = (BaseMdiChildForm)Activator.CreateInstance(type);
childForm.MdiParent = this;
childForm.BringToFront();
childForm.Show();
}