可以把 testinte***ce 塊裡的方法放進 main 執行來對應的理解
using system;
using system.collections.generic;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace reflectionlearn
#region testinte***ce
#region getmembers
private
static
void
printclasspublicinfo(type vartype)
private
static
void
printclassallinfo(type vartype)
private
static
void
printclassselfinfo(type vartype)
private
static
void
printclassselfincluestaticinfo(type vartype)
#endregion
#region getfields
private
static
void
printclassfieldsinfo()
if (tempinfo.name == "k__backingfield")
console.writeline("名稱: " + tempinfo.name + " -- 型別: " + getmembertype(tempinfo.membertype) + " - 值: " + tempinfo.getvalue(temprc));
}console.readkey();
}private
static
void
printclasspropertyinfo()
返回值型別: 引數數量: msil**長度: 區域性變數數量:",
tempgetinfo.name, tempgetinfo.returntype.tostring(),
tempgetinfo.getparameters().count(),
tempgetinfo.getmethodbody().getilasbytearray().length,
tempgetinfo.getmethodbody().localvariables.count);
methodinfo tempsetinfo = tempinfo.getsetmethod(true);
console.writeline("get方法的名稱 返回值型別: 引數數量: msil**長度: 區域性變數數量:",
tempsetinfo.name, tempsetinfo.returntype.tostring(),
tempsetinfo.getparameters().count(),
tempsetinfo.getmethodbody().getilasbytearray().length,
tempsetinfo.getmethodbody().localvariables.count);
tempsetinfo.invoke(temprc, new
object );
object obj = tempgetinfo.invoke(temprc, null);
console.writeline("方法名: 內部值:", tempinfo.name, obj);
}console.readkey();
}#endregion
#region staticmethods
private
static
void
printclassstaticmethodinfo()
);methodbody mbody = tempinfo.getmethodbody();
console.writeline("擁有引數的方法名: 返回值型別: 引數1型別: 引數1名稱: 方法呼叫後返回的值:",
tempinfo.name,
tempinfo.returntype.tostring(),
tempinfo.getparameters()[0].parametertype.tostring(),
tempinfo.getparameters()[0].name,
obj.tostring());
}else
返回值型別:",
tempinfo.name,
tempinfo.returntype.tostring());}}
console.readkey();
}#endregion
#endregion
#region logicbusiness
private
static
void
showmemberconsoleinfo(memberinfo varmeminfos)
console.readkey();
}private
static
string
getmembertype(membertypes varmemtype)
break;
case membertypes.method:
break;
case membertypes.property:
break;
case membertypes.constructor:
break;
case membertypes.custom:
break;
case membertypes.event:
break;
case membertypes.nestedtype:
break;
case membertypes.typeinfo:
break;
default:
break;
}return temptypestr;
}#endregion
}#region defineinfo
public
class refclass
protected
int mproteint;
public
int pintmember
public customclassone mcustomclass;
public
void
anyone()
public
static
void
thisisstaticmethodone()
public
static
void
thisisstaticmethodtwo()
public
static
string
hadreturnvaluea(string varstr)
public
static
string
hadreturnvalueb(string varstr)
}public
class customclass
public
class customclassone : customclass
public
class customclasstwo : customclass
#endregion
}
反射手冊筆記 3 使用物件
本章是上一章的繼續,再獲取到物件型別後,接下來做的事情。第一部分 動態呼叫成員 呼叫方法,檢索或更改屬性,以及字段 方法1 利用info類呼叫類成員 1.用methodinfo類呼叫方法 object invoke object obj,object parameters 其中,第1個引數obj,是...
《C 技術揭密》手記
2007 12 26 19.5,這個例子。把commprotocol及其子類都放在乙個專案中,然後單獨生成幾個類的dll檔案,然後編譯專案,編譯成功。執行時卻總會報乙個commprotocol同時存在於和中,省略號為guid,看起來感覺這個類應該同時存在於兩個dll中,可是dll就這麼幾個,還有別的...
c so 反射 C 實現反射機制
net下的很多技術都是基於反射機制來實現的,反射讓.net平台下的語言變得得心應手。最簡單的,比如列舉型別,我們我可以很容易的獲得乙個列舉變數的數值以及其名稱字串。可是,在c 中,列舉變數本質上和乙個整形變數沒有區別,我們很難獲取乙個列舉變數的名稱字串。其實在c 中,我們可以通過巨集來實現類似反射的...