클래스 이름 문자열에 따라 클래스를 실례화하고 클래스를 호출하는 방법이나 함수

//유형 정보 얻기
//다른 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;
        }
    }
}

좋은 웹페이지 즐겨찾기