摘要本文介绍今天把C#反射方法的东西整理了一下供大家使用我保证我这里是最全面的东西当然也是基础的东西
在网上查找了不少的资料可以说大同小异概念性的东西网上一搜一堆今天把C#反射方法的东西整理了一下供大家使用我保证我这里是最全面的东西当然也是基础的东西在学好了这一切的基础上大家可以学习C#反射方法的具体插件等应用老鸟就不用看了首先我们建立一个类库将它生成为HelloWorlddll
usingSystem;
namespaceWebtest
…{
publicinterfaceinterface
…{
intadd()
}
publicclassReflectTest:interface
…{
publicStringWrite;
privateStringWritec;
publicStringWritea
…{
get
…{
returnWrite;
}
set
…{
Write=value;
}
}
privateStringWriteb
…{
get
…{
returnWritec;
}
set
…{
Writec=value;
}
}
publicReflectTest()
…{
thisWrite=Write;
thisWritec=Writec;
}
publicReflectTest(stringstrstringstr)
…{
thisWrite=str;
thisWritec=str;
}
publicstringWriteString(stringsintb)
…{
return欢迎您+s++b;;
}
publicstaticstringWriteName(strings)
…{
return欢迎您光临+s;
}
publicstringWriteNoPara()
…{
return您使用的是无参数方法;
}
privatestringWritePrivate()
…{
return私有类型的方法;
}
publicintadd()
…{
return;
}
}
}
然后建立再建立一个项目引入该HelloWorlddll
usingSystem;
usingSystemThreading;
usingSystemReflection;
classTest
…{
delegatestringTestDelegate(stringvalueintvalue)
staticvoidMain()
…{
//AssemblyAssemblyt=AssemblyLoadFrom(HelloWorlddll)与下面相同的效果
AssemblyAssemblyt=AssemblyLoad(HelloWorld)
foreach(TypeaaaintGetTypes())
…{
//ConsoleWrite(aaaName)//显示该dll下所有的类
}
Module[]modules=tGetModules()
foreach(Modulemoduleinmodules)
…{
//ConsoleWriteLine(modulename:+moduleName)//显示模块的名字本例为HelloWorlddll
}
Typea=typeof(WebtestReflectTest)//得到具体的类的类型和下面一个效果
//Typea=tGetType(WebtestReflectTest)//
//ConsoleWrite(aName)
string[]bb=…{aaaabbbbb};
objectobj=ActivatorCreateInstance(abb)//创建该类的实例后面的bb为有参构造函数的参数
//objectobj=tCreateInstance(WebtestReflectTest)//与上面方法相同
MethodInfo[]miArr=aGetMethods()
foreach(MethodInfomiinmiArr)
…{
//ConsoleWrite(miName)//显示所有的共有方法
}
MethodInfomi=aGetMethod(WriteString)//显示具体的方法
object[]aa=…{使用的是带有参数的非静态方法};
strings=(string)miInvoke(objaa)//带参数方法的调用
MethodInfomi=aGetMethod(WriteName)
String[]aa=…{使用的是静态方法};
strings=(string)miInvoke(nullaa)//静态方法的调用
MethodInfomi=aGetMethod(WriteNoPara)
strings=(string)miInvoke(objnull)//不带参数的方法调用
MethodInfomi=aGetMethod(WritePrivateBindingFlagsInstance|BindingFlagsNonPublic)
strings=(string)miInvoke(objnull)//私有类型方法调用
//ConsoleWrite(s)
PropertyInfo[]piArr=aGetProperties
(BindingFlagsInstance|BindingFlagsNonPublic|BindingFlagsPublic)
foreach(PropertyInfopiinpiArr)
…{
//ConsoleWrite(piName)//显示所有的方法
}
PropertyInfopi=aGetProperty(Writea)
//piSetValue(objWriteanull)
//ConsoleWrite(piGetValue(objnull))
PropertyInfopi=aGetProperty
(WritebBindingFlagsInstance|BindingFlagsNonPublic|BindingFlagsPublic)
piSetValue(objWritebnull)
//ConsoleWrite(piGetValue(objnull))
FieldInfofi=aGetField(Write)
//ConsoleWrite(fiGetValue(obj))
ConstructorInfo[]ci=aGetConstructors()
foreach(ConstructorInfociinci)
…{
//ConsoleWrite(ciToString())//获得构造函数的形式
}
ConstructorInfoasCI=aGetConstructor(newType[]…{
typeof(string)typeof(string)})
//ConsoleWrite(asCIToString())
Webtestinterfaceobj=(Webtestinterface)tCreateInstance
(WebtestReflectTest)
WebtestReflectTestobj=(WebtestReflectTest)tCreateInstance(WebtestReflectTest)
//ConsoleWrite(objadd())典型的工厂模式
foreach(TypettintGetTypes())
…{
if(ttGetInterface(interface)!=null)
…{
Webtestinterfaceobj=(Webtestinterface)ActivatorCreateInstance(a)
//ConsoleWrite(objadd())
}
}
TestDelegatemethod=(TestDelegate)DelegateCreateDelegate
(typeof(TestDelegate)objWriteString)
//动态创建委托的简单例子
ConsoleWrite(method(str))
ConsoleRead()
}
}
在这里我把我们常用的方法属性等全部整理了出来大家不要嫌弃乱静下心来自己按照我的分隔一部分一部分的来保证你对C#反射方法的学习会事半功倍当然有关于其方法我会继续补充想了这么些就先写下来吧