反射可以不但用來讀取元資料,還可以使用反射從編譯時還不清楚的型別中動態建立程式集,此案例摘自c#高階程式設計。首先先建立乙個控制台應用程式,然後新增乙個類庫,類庫名稱為calculatorlib,如下圖所示:
calculatorlib程式集中有兩個方法,引數是x和y,乙個方法返回兩數之和,另乙個方法返回兩數之差,**如下圖所示:
namespace calculatorlib
}
接下來我們要在控制台車程式中例項化類calculator,並呼叫其中的方法。控制台中的**如下圖所示:
class program
public static object getcalculator()
public static void reflectionold()
);object result2 = calc.gettype().getmethod("subract").invoke(calc,new object );
console.writeline($"x + y = ");
console.writeline($"x - y = ");
console.read();}}
執行結果如下圖所示:
第二種方式是利用dynamic進行,dynamic語法會比上面第一種方法簡單,但是處理起來消耗更多的時間和資源。關於dynamic會在以後中學習。修改**如下圖所示:
class program
public static object getcalculator()
public static void reflectionnew()
");double result2 = calc.subract(x, y);
console.writeline($"x - y = ");
console.read();}}
執行結果是一樣的:
我個人認為反射是框架級的技術,由此案例為基礎可以為以後元件式開發打下根基,並極大的降低程式的耦合,棒!
利用Assembly動態引導程式集
在程式開發中,經常需要呼叫到外部的dll,所以需要反射技術,動態的引導程式集,方便呼叫.例如我們建立乙個這樣的類 namespace user public showname string name public string name set private string name public ...
c 反射中Assembly類動態引導程式集
c 反射中assembly.load及assembly.load.createinstance方法介紹 1 assembly.load 程式集 程式集名稱即dll名稱 用assembly.load 引導程式集的順序是怎樣的呢?首先它會去全域性程式集快取查詢 然後到應用程式的根目錄查詢,最後會到應用程...
利用反射方式,動態引用程式集建立類
為更好的 重用,公司做了一套winform的框架,整合資料操作 使用者許可權等功能,並進行相應的封裝.基於此框架可以任意新建應用,然後通過資料庫配置,使用框架呼叫新開發程式集中的類或窗體就可以了,基於這種想法,採用反射的實現方式.根據建構函式不同,可以使用預設的建構函式,或帶參的建構函式 可以在資料...