|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的静态(C#)使用反射静态挪用类成员
利用反射静态挪用类成员,必要Type类的一个办法:InvokeMember。对该办法的声明以下(摘抄于MSDN):
publicobjectInvokeMember(
stringname,
BindingFlagsinvokeAttr,
Binderbinder,
objecttarget,
object[]args
);
参数
name
String,它包括要挪用的机关函数、办法、属性或字段成员的称号。
-或-
空字符串(""),暗示挪用默许成员。
invokeAttr
一个位屏障,由一个或多个指定搜刮实行体例的BindingFlags构成。会见能够是BindingFlags之一,如Public、NonPublic、Private、InvokeMethod和GetField等。不必要指定查找范例。假如省略查找范例,则将使用BindingFlags.Public|BindingFlags.Instance。
binder
一个Binder工具,该工具界说一组属性并启用绑定,而绑定大概触及选择重载办法、强迫参数范例和经由过程反射挪用成员。
-或-
若为空援用(VisualBasic中为Nothing),则利用DefaultBinder。
target
要在其上挪用指定成员的Object。
args
包括传送给要挪用的成员的参数的数组。
前往值
暗示被挪用成员的前往值的Object。
备注:
以下BindingFlags选择标记可用于界说包括在搜刮中的成员:
为了猎取前往值,必需指定BindingFlags.Instance或BindingFlags.Static。
指定BindingFlags.Public可在搜刮中包括大众成员。
指定BindingFlags.NonPublic可在搜刮中包括非大众成员(即公有成员和受回护的成员)。
指定BindingFlags.FlattenHierarchy可包括条理布局上的静态成员。
以下BindingFlags润色符标记可用于变动搜刮的实行体例:
BindingFlags.IgnoreCase,暗示疏忽name的巨细写。
BindingFlags.DeclaredOnly,仅搜刮Type上声明的成员,而不搜刮被复杂承继的成员。
可使用以下BindingFlags挪用标记暗示要对成员接纳的操纵:
CreateInstance,暗示挪用机关函数。疏忽name。对其他挪用标记有效。
InvokeMethod,暗示挪用办法,而不挪用机关函数或范例初始值设定项。对SetField或SetProperty有效。
GetField,暗示猎取字段值。对SetField有效。
SetField,暗示设置字段值。对GetField有效。
GetProperty,暗示猎取属性。对SetProperty有效。
SetProperty暗示设置属性。对GetProperty有效。
上面经由过程例题对该办法举行复杂使用(我一向觉得,要让例题起到更简单了解笔墨的意义和感化,撰写的例题越复杂越直不雅越好。)
usingSystem;
usingSystem.Reflection;
namespaceConsoleApplication9
{
classLove
{
publicintfield1;
privatestring_name;
publicLove()
{
}
publicstringName
{
get
{
return_name;
}
set
{
_name=value;
}
}
publicintGetInt(inta)
{
returna;
}
publicvoidDisplay(stringstr)
{
Console.WriteLine(str);
}
}
///<summary>
///Class1的择要申明。
///</summary>
classClass1
{
///<summary>
///使用程序的主出口点。
///</summary>
[STAThread]
staticvoidMain(string[]args)
{
//
//TODO:在此处增加代码以启动使用程序
//
Lovelove=newLove();
Typetype=love.GetType();
Objectobj=type.InvokeMember(null,
BindingFlags.DeclaredOnly|
BindingFlags.Public|BindingFlags.NonPublic|
BindingFlags.Instance|BindingFlags.CreateInstance,null,null,args);
//挪用没有前往值的办法
type.InvokeMember("Display",BindingFlags.InvokeMethod|BindingFlags.Public|BindingFlags.Instance,null,obj,newobject[]{"aldfjdlf"});
//挪用有前往值的办法
inti=(int)type.InvokeMember("GetInt",BindingFlags.InvokeMethod|BindingFlags.Public|BindingFlags.Instance,null,obj,newobject[]{1});
Console.WriteLine(i);
//设置属性值
type.InvokeMember("Name",BindingFlags.SetProperty,null,obj,newstring[]{"abc"});
</p>asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了! |
|