定義簡單的反射工廠示例

2021-09-06 03:25:22 字數 3217 閱讀 5819

首先,定義乙個水果抽象類,**如下:

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 傳遞兩個引數,乙個是字串含有每個屬性的屬性名和值對,屬性和值用冒號分隔,屬性與屬性用逗號分隔,另乙個引數是要建立的物件的型別 將字串分解成 屬性 值...