对类型变量T的约束关系

三个类,其中B继承A

 

 

ContractedBlock.gif ExpandedBlockStart.gif Code
 1public class A 
 2
 3ExpandedBlockStart.gifContractedBlock.gif
 4
 5public A() 
 6
 7ExpandedSubBlockStart.gifContractedSubBlock.gif
 8
 9AName = "This is A"
10
11}
 
12
13ExpandedSubBlockStart.gifContractedSubBlock.gifpublic string AName getset; } 
14
15}
 
16
17   
18
19public class B : A 
20
21ExpandedBlockStart.gifContractedBlock.gif
22
23public B() 
24
25ExpandedSubBlockStart.gifContractedSubBlock.gif
26
27BName = "This is B"
28
29}
 
30
31ExpandedSubBlockStart.gifContractedSubBlock.gifpublic string BName getset; } 
32
33}
 
34
35   
36
37public class C 
38
39ExpandedBlockStart.gifContractedBlock.gif
40
41public C() 
42
43ExpandedSubBlockStart.gifContractedSubBlock.gif
44
45CName = "This is C"
46
47}
 
48
49ExpandedSubBlockStart.gifContractedSubBlock.gifpublic string CName get;set;} 
50
51}
 
52

   

测试用方法

 

ContractedBlock.gif ExpandedBlockStart.gif Code
public static string GetName<T>(object obj) where T : A 



return typeof(T).GetProperty("AName").GetValue(obj,null).ToString(); 


 

约束关系要求类型变量T是A本身或者继承自A

ContractedBlock.gif ExpandedBlockStart.gif Code
A a = new A(); 

B b 
= new B(); 

C c 
= new C(); 

此时可以用 GetName<A>(a)或者GetName<B>(b),如果调用GetName<C>(c)就会报错;

此外还可以使用where T:new()来指定构造函数

   

   

转载于:https://www.cnblogs.com/baby_shark/archive/2008/10/20/1315036.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值