C#泛型编程指导原则(15--16)

Item 15: Select the Least Restrictive Constraints选择最少限制的约束

在给类型参数选择约束条件的时候,最好只加入最少的限制,不要加入不必要的附加限制。下面是一个约束过头的例子。

public interface IPerson

 {

void Validate();

}

public interface ICustomer : IPerson { }

public interface IEmployee : IPerson { }

public class TestClass<T> where T : ICustomer

 {

public TestClass(T val)

{

val.Validate();

}

}

这个例子中有一个接口的继承。对TestClass<T>的约束是可行的,但是,但也过分的限制了参数的类型。因为这里需要的约束是Validate(),而它是IPerson的一部分,所以你应该使用IPerson作为约束条件。

Item 16: Don’t Impose Hidden Constraints不要强加隐式的约束条件

即使你的类型没有在声明的时候包含任何约束,这并不意味着你的类型不能在实现中强加隐式的约束。可以想象,通过强制转换或者调用GetType()方法,可以在泛型类型中生成建立于类型参数的代码,在这样的情况下,你仍然对类型参数强加了非直接的约束仅仅是没有显式的声明而已。

这种隐式的约束当然是约束,同时是糟糕的主意。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值