有没有办法将通用接口约束到实现它的类型?

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以返回其自身实例,而不是任何随机类型.

Mar*_*ell 5

不,基本上.你不能用通用约束来做到这一点.此外,您无法阻止它们多次使用不同的实现接口T(只要T满足任何where约束,在这种情况下都不会).

没有where约束允许限制实现类型.

你有点可以做它作为方法参数限制,但它不是真的令人满意:

public static T SuperClone<T>(this T original) where T : ICloneable<T> {...}
Run Code Online (Sandbox Code Playgroud)