클래스 이름 문자열에 따라 클래스를 실례화하고 클래스를 호출하는 방법이나 함수
//다른 DLL 호출 시
//System.Reflection.Assembly asmb = System.Reflection.Assembly.LoadFrom("DLL 이름");
//Type t = asmb.GetType("클래스 이름");
//다른 DLL을 호출하지 않는 경우
System.Type t = System.Type.GetType("클래스 이름");
try
{
object dObj = Activator.CreateInstance(t);
//획득 방법에 대한 정보
System.Reflection.MethodInfo method = t.GetMethod(메소드 이름),
//호출 방법의 일부 표지 비트, 여기의 의미는 Public이고 실례적인 방법입니다. 이것도 기본값입니다.
System.Reflection.BindingFlags flag = System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance;
//GetValue 메서드의 매개변수
object[] parameters = new object[] {"매개 변수 1"};
//object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder,
parameters, null);
//가져오는 방법이 되돌아오는 값
object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder,
parameters, null);
}
catch(Exception ex)
{
}
다음은 제가 직접 쓴 Reflection 클래스입니다. 클래스 이름, 방법명에 따라 실행할 수 있는 방법입니다.
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace SearchFromDB
{
class Reflection
{
string ClassName="";
Type clstype;
public Reflection(string ClassName)
{
this.ClassName = ClassName;
}
public Reflection()
{
}
/// <summary>
///
/// </summary>
public object GetClassInstance(string assembly ,string NameSpace)
{
//assembly ,NameSpace
clstype = Assembly.Load(assembly).GetType(string.Concat(NameSpace, ".", this.ClassName));
if (clstype == null)
return null;
object obj = (object)Activator.CreateInstance(clstype);
return obj;
}
/// <summary>
///
/// </summary>
public object GetClassInstance(string assembly,string NameSpace,string classname)
{
ClassName = classname;
clstype = Assembly.Load(assembly).GetType(string.Concat(NameSpace, ".", classname));
if (clstype == null)
return null;
object obj = (object)Activator.CreateInstance(clstype);
return obj;
}
/// <summary>
///
/// </summary>
/// <param name="methodname">
///
/// </param>
/// <param name="parameters">
///
/// </param>
/// <param name="methodtype">
///
/// </param>
public object GetMethod(string methodname, Type[] methodtype, object[] parameters)
{
// methodtype.SetValue(typeof(string),1);
System.Reflection.MethodInfo pMethod = clstype.GetMethod(methodname, BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.Public, null, methodtype, null);
// , Public ,
//System.Reflection.BindingFlags flag = BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.Public;
object returnValue = pMethod.Invoke(null, parameters);
//string returnValue = pMethod.Invoke(clsObj, flag, Type.DefaultBinder, parameters,null).ToString();
return returnValue;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception Class에서 에러 코드 해석 ~초기초편~직장에서 C# 프로젝트가 내뿜는 오류 코드를 구문 분석하고 오류의 위치를 확인하기 위해 Exception class를 활용할 수 있었습니다. 지금까지 Exception Class 에 대해서 별로 파악할 수 없었기 때...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.