Wil*_*sem 1 c# generics liskov-substitution-principle constraints
我尝试创建一个继承System.ICloneable接口的通用接口,但Clone()方法的返回类型为T.当然,T类型需要约束以确保它是System.Object类的继承但是以下代码无效.
public interface ICloneable<T> : System.ICloneable where T : object {
T Clone ();
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
此外,以下约束不起作用:
在这种情况下,我如何使用Liskov原则,说明您可以缩小返回类型,以解决此问题?
PS:对不起我的英语,如果我犯了错误.我不是母语为英语的人.
为什么你需要一个约束?一切都继承自object......
如果没有约束,您的代码应该可以工作,但是您需要以Clone与IEnumerable/ IEnumerable<T>work 相同的方式实现这两种方法- .NET没有协变返回类型.您还应该指定您的Clone方法将其隐藏在ICloneable:
public interface ICloneable<T> : ICloneable
{
new T Clone();
}
Run Code Online (Sandbox Code Playgroud)
请注意,当前的ICloneable界面有点不赞成 - 因为它没有给出克隆深度的指示,在大多数情况下它并不是非常有用.
你真的需要扩展非泛型类型吗?您是否希望用户想要使用非通用接口以及通用接口?
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |