建立類
classoperatorclass
//////
減法
///
//////
///public
static
int subtract(int x, int
y)
//////
乘法
///
//////
///public
int mulitiple(int x, int
y)
//////
除法
///
//////
///public
int divide(int x, int
y)
return x /y;
}//////
取餘數求餘
///
//////
///public
int remain(int x, int
y)
return x %y;
}//////
獲取陣列的最大數以及最大數所在的索引
///
///陣列
///輸出最大值的所在的索引
///public
int getmaxnumber(int array, out
intmaxindex)
int max = array[0]; maxindex = 0
;
for (int i = 1; i < array.length; i++)
} return
max;
}//////
獲得不定項陣列的長度
///
//////
public
int getvaryarraylength(params
int array)
return
array.length;
}//////
測試帶ref的引數
///
//////
public
void testreference(int inparameter, ref
intrefparameter)
public
bool teststring(string s1, string
s2)
//////
私有方法無法通過反射得到該方法的資訊
///
private
void
privatemethod()
}
引導程式集的類,獲得其中的方法
assembly assembly = assembly.load("testclasslibrary");
console.writeline(
"程式集資訊:\n
" +assembly.fullname);
console.writeline();
type ts = assembly.gettypes();//
獲得程式集中定義的型別
for (int i = 0; i < ts.length; i++)
:的所有公共方法:
", i + 1
, typefullname);
methodinfo mis = ts[i].getmethods();//
返回當前型別的所有公共方法
for (int j = 0; j < mis.length; j++)
:,返回值的型別:,是靜態方法:",
j + 1, mis[j].name, mis[j].returntype, mis[j].isstatic); parameterinfo paras = mis[j].getparameters();//
獲取指定的方法或建構函式的引數資訊
for (int k = 0; k < paras.length; k++)
: ,簽名位置:,是輸出引數:",
k + 1
, paras[k].parametertype, paras[k].name, paras[k].position, paras[k].isout);}}
console.writeline();
}
方法的呼叫
//////測試呼叫類庫中的方法
///static
void
testinvokemethod()
.", "
testclasslibrary
", "
operatorclass
"));
console.writeline(
"呼叫testclasslibrary.operatorclass 類的公共靜態方法public static int add(int x, int y) 的例子");
system.reflection.methodinfo mi = ty.getmethod("
add"
);
//呼叫靜態方法add時,invoke的第乙個引數為null
object returnvalue = mi.invoke(null, new
object );
console.writeline(
"add方法的返回值:\r\n
", returnvalue);
console.writeline(
"呼叫testclasslibrary.operatorclass 類的公共方法public int getmaxnumber(int array, out int maxindex) 的例子");
system.reflection.methodinfo mi1 = ty.getmethod("
getmaxnumber");
//呼叫例項化方法(非靜態方法)需要建立型別的乙個例項
object instanceobject =activator.createinstance(ty);
int maxindex = -1
;
object parametersinfo = new
object , maxindex };
//呼叫例項化方法getmaxnumber時,invoke的第乙個引數是乙個例項化物件
object returnvalue1 =mi1.invoke(instanceobject, parametersinfo);
maxindex = convert.toint32(parametersinfo[1
]); console.writeline(
"getmaxnumber方法的返回值(最大值):,最大值的索引:
", returnvalue1, maxindex);
system.reflection.methodinfo mi2 = ty.getmethod("
teststring");
object str = new
object ;
object returnvalue2 =mi2.invoke(instanceobject, str);
}
練習**
c 反射呼叫程式集方法 介面例項
新建類庫 webtest 新增相應類 reflecttest 介面inte ce1 using system using system.collections.generic using system.linq using system.text namespace webtest public c...
C 反射呼叫拓展類方法
今天封裝protobuf封包時候遇到乙個問題 protobuf的反序列化方法mergefrom,是寫在擴充套件類裡的 c 拓展類 通過反射獲取不到這個方法,就沒法使用type來泛型封裝.然而仔細一想,拓展類不也是類嗎,直接反射獲取拓展類方法好了 在看google.protobuf原始碼,找到這個類 ...
程式集反射 Type 類
type 類 表示型別宣告 類型別 介面型別 陣列型別 值型別 列舉型別 型別引數 泛型型別定義,以及開放或封閉構造的泛型型別。這個類是執行緒安全的。type 為 system.reflection 功能的根,也是訪問元資料的主要方式。使用 type 的成員獲取關於型別宣告的資訊,如建構函式 方法 ...