Gaz*_*yer 1 c# generics interface generic-constraints
public interface ICloneable<T>
{
T Clone();
}
public Foo: ICloneable<Foo>
{
public Foo Clone()
{
//blah
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法约束T实现接口的类型?(Foo在这种情况下).强制执行任何实现ICloneable以返回其自身实例,而不是任何随机类型.
不,基本上.你不能用通用约束来做到这一点.此外,您无法阻止它们多次使用不同的实现接口T(只要T满足任何where约束,在这种情况下都不会).
没有where约束允许限制实现类型.
你有点可以做它作为方法参数限制,但它不是真的令人满意:
public static T SuperClone<T>(this T original) where T : ICloneable<T> {...}
Run Code Online (Sandbox Code Playgroud)