作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这篇文章是 this one 的延续.
我试图了解我是否是唯一一个错过并需要 .NET 泛型类型继承其泛型参数类型之一的能力的人。
面临的挑战是收集支持此功能的令人信服的理由,或者,要知道没有。
我给出了将它作为这个问题的答案的理由——见下文。
我要求那里的人们将他们的答案添加到这篇文章中。
如果您不同意该功能有用或没有充分的理由支持 - 请不要在此处发布任何内容,尽管您可以在开始这一切的原始帖子中这样做 - here .
附言
一些 C++ 模式在 .NET 中是不相关的。例如,在他的优秀著作 Modern C++ Design Andrei Alexandrescu 描述了如何创建在编译时评估的类型列表。自然,这种模式与 .NET 无关,如果我需要类型列表,我只需创建 List<Type>
并用类型填充它。因此,让我们尝试找出与 .NET 框架相关的原因,而不是盲目地将 C++ 编码技术转换为 C#。
附言
当然,这种讨论是严格的学术性的。即使有一百个令人信服的理由来说明所讨论的功能,它也永远不会被实现。
最佳答案
我时不时地偶然发现一个实现问题,对此我深感遗憾 C<T>
不能继承 T
.不幸的是,我从未记录过这些问题,所以我只能描述最近的一个——我现在偶然发现的一个。所以这里是:
我们的系统可以通过元数据进行扩展,元数据在运行时可用。元数据被转换为在运行时使用 Reflection.Emit 动态生成的类型。不幸的是,动态生成的类型必须满足以下条件:
IDynamicObject
(我们的界面),System.ComponentModel.INotifyPropertyChanged
和 Csla.Core.IMobileObject
.请注意,此条件对祖先类型施加了某些限制。例如,祖先类型可能不实现 IDynamicObject
接口(interface),除非所有接口(interface)方法都是抽象实现的。还有其他约束,所有这些都必须检查。 object
方法Equals
, ToString
和 GetHashCode
. object.Equals(object)
的覆盖方法调用
DynamicObjectHelper(IDynamicObject, IDynamicObject)
这是一个静态编译的 C# 代码,完成了大部分工作
DynamicObjectBase<T>
哪个将使用祖先类型实例化并用作动态生成类型的实际基类型?在我看来,泛型
DynamicObjectBase<T>
可以在静态编译的 C# 代码中实现大部分动态类型要求。动态发出的类型会继承它,并且可能只是覆盖一些简单的虚拟方法。
C<T>
继承自 T
将大大简化发出动态类型的任务。
关于.net - 希望 .NET 泛型可以继承其中一种泛型参数类型的充分理由是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1849107/
我是一名优秀的程序员,十分优秀!