C#泛型编程指导原则(17--18)

本文探讨了在使用C#泛型时如何避免多重约束引起的含糊不清,并强调了为类型提供无参构造器的重要性,这对于泛型类型的使用至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Item 17: Avoid Multiple Constraint Ambiguity避免多重约束中的含糊

当使用约束的时候,可以选择对任何一个类型参数使用多重约束。事实上,你可以将单独的类约束与多重接口约束联合使用。当你开始混合并匹配多重约束的时候,可能引入含糊不清的约束。

如:

public interface I

{

void Foo1();

void Foo3();

}

public class C

{

public void Foo1() {}

}

public class TestClass<T> where T : C, I { }

这里接口I和类C中的Foo1产生了混淆。

Item 18: Provide Parameterless Constructors提供无参构造器

无论何时,当你引入自定义类型的时候,都需要考虑当他们被用作类型参数的时候会产生什么样的行为。显然,你选择实现的接口会在该类型如何被约束方面起关键性的作用。至少,准备用为类型参数的每个类型都应该包含对参数构造的支持。通过支持这个约束,使得你的类型可以被任何包含构造约束的泛型类型所支持。

通过支持无参数的构造器来增加你的接口的价值的实例足够多,不过是对于泛型还是非泛型解决方案。如果你曾经和工厂模式的任何一种变形打过交道,你可能已经提供过无参构造器。有了泛型,该条款可以增加价值的场景的列表只会变得更长。

例如:

public IEnumerable<T> GetDataObjects() where T : new() {}

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值