首先,定義乙個水果抽象類,**如下:
class
fruit}
然後,例項化幾個水果類,**如下:
class
banana : fruit
}class
orange : fruit
}class
public
newvoid
eating()
//public override void eating()//}
最後,建立水果工廠,**如下:
//水果工廠
class
fruitfactory
//else if ("banana" == _fruitname)
////
else if ("orange" == _fruitname)
////
else
////
獲得當前程式的命名空間
string
strnamespace
=assembly.getexecutingassembly().getname().name;
//呼叫方法一:使用 type 類
////
constructorinfo ctorinfo = type.getconstructor(system.type.emptytypes);
//// invoke()方法:返回與建構函式關聯的類的例項。
//fruit fruita = (fruit)ctorinfo.invoke(new object[0]);
//return fruita;
//呼叫方法二:使用 assembly 類
//assembly myassembly = assembly.getexecutingassembly();
////
return fruitb;
//呼叫方法三:使用 activator 類
fruit fruitc
=(fruit)activator.createinstance(type.gettype(""
+_fruitname,
false
, true
));return
fruitc;}}
測試**如下:
class
program}
利用反射建立例項物件的常用三種方式:
// 方式一:使用 type 類
type type
=type.gettype(""
+_fruitname);
constructorinfo ctorinfo
=type.getconstructor(system.type.emptytypes);
//invoke()方法:返回與建構函式關聯的類的例項。
fruit fruita
=(fruit)ctorinfo.invoke(
newobject[0
]);return
fruita;
// 方式二:使用 assembly 類
assembly myassembly
=assembly.getexecutingassembly();
fruit fruitb
=(fruit)myassembly.createinstance(""
+_fruitname);
return
fruitb;
// 方式三:使用 activator 類
fruit fruitc
=(fruit)activator.createinstance(type.gettype(""
+_fruitname,
false
, true
));return
fruitc;
示例的全部**如下:
using
system;
using
system.collections.generic;
using
system.text;
using
system.reflection;
//抽象類可以繼承抽象類
namespace
class
fruit}//
水果工廠
class
fruitfactory
//else if ("banana" == _fruitname)
////
else if ("orange" == _fruitname)
////
else
////
獲得當前程式的命名空間
string
strnamespace
=assembly.getexecutingassembly().getname().name;
//呼叫方法一:使用 type 類
////
constructorinfo ctorinfo = type.getconstructor(system.type.emptytypes);
//// invoke()方法:返回與建構函式關聯的類的例項。
//fruit fruita = (fruit)ctorinfo.invoke(new object[0]);
//return fruita;
//呼叫方法二:使用 assembly 類
//assembly myassembly = assembly.getexecutingassembly();
////
return fruitb;
//呼叫方法三:使用 activator 類
fruit fruitc
=(fruit)activator.createinstance(type.gettype(""
+_fruitname,
false
, true
));return
fruitc;}}
class
banana : fruit
}class
orange : fruit
}class
public
newvoid
eating()
//public override void eating()//}
class
program}}
定義簡單的反射工廠示例
首先,定義乙個水果抽象類,如下 class fruit 然後,例項化幾個水果類,如下 class banana fruit class orange fruit public override void eating 最後,建立水果工廠,如下 水果工廠 class fruitfactory else...
反射 基於反射的簡單工廠
得到type的幾種方法 1.0通過typeof方法得到type type t1 typeof form1 2.0根據物件得到type person p new person type t2 p.gettype 3.0根據程式集得到對應的type assembly ass assembly.load ...
關於反射的簡單示例
先寫乙個從字串生成任何型別的物件的函式 public object stringtoobject string str,type objecttype 傳遞兩個引數,乙個是字串含有每個屬性的屬性名和值對,屬性和值用冒號分隔,屬性與屬性用逗號分隔,另乙個引數是要建立的物件的型別 將字串分解成 屬性 值...