3 回答
TA贡献1804条经验 获得超8个赞
好吧,首先问问自己可能有什么问题class C<T> : T { }
。立刻想到了很多事情:
如果T是一个结构怎么办?如果T是密封类类型怎么办?如果T是接口类型怎么办?如果T是C<T>
?如果T是从中派生的类C<T>
怎么办?如果T是具有抽象方法的抽象类型怎么办?如果T具有比C少的可访问性怎么办?如果T是System.ValueType怎么办?(您可以有一个继承自System.ValueType的非结构吗?)System.Delegate,System.Enum等如何?
这些是简单,显而易见的。提议的功能实际上打开了数百个(如果不是数千个)关于类型与其基类型之间的交互的更微妙的问题,所有这些问题都必须仔细指定,实现和测试。毫无疑问,我们会错过某些内容,从而在将来造成重大更改,或者使运行时受实现定义的行为约束。
成本将是巨大的,因此收益最好是巨大的。我在这里没有看到巨大的好处。
TA贡献1860条经验 获得超9个赞
好吧,如果您不喜欢我以前的回答,那么让我们采取另一种方法。
你的问题的先决条件是谎言:我们需要一个理由来不执行一个功能。相反,我们需要一个非常非常好的理由来实现任何功能。功能的前期成本,维护成本和机会成本非常昂贵。(也就是说,您花在功能X上的时间就是您不能花在执行功能Y上的时间,这可能会阻止您执行功能Z。)为了负责任地为我们的客户和利益相关者提供价值,我们无法实施所有功能有人碰巧喜欢
不能由运行时设计者来证明为什么他们没有实现您认为特别好的功能。根据功能的成本和对用户的好处来对功能进行优先级排序,并且用户并没有完全要求我进行此类继承。这个特殊功能将极大地改变类型系统的分析在运行时的工作方式,对使用泛型的每种语言产生深远的影响,并且对我来说几乎没有好处。
我们在用C ++编写的编译器中使用这种继承,并且所生成的代码难以理解,难以维护且难以调试。我一直在尽力逐步消除这样的代码。我反对在C#中启用相同类型的错误模式,除非这样做具有巨大的吸引力。
以令人信服的方式描述巨大利益的任务是由想要该功能的人员而不是必须实施该功能的人员承担。那么,什么是引人注目的收益?
TA贡献1876条经验 获得超6个赞
可以帮助的代码示例:
public class SpecialDataRow<T> : T where T : DataRow
{
public int SpecialFactor { get; set; }
}
这将使您能够从DataRow以及任何派生的DataRows(如键入的数据集生成的数据行)中创建“特殊”行
我没有看到其他方式如何编码这样的类
- 3 回答
- 0 关注
- 734 浏览
添加回答
举报