c# 接口方法必须具有从自身派生的 return 类型
c# Interface method must have return type that derives from itself
我正在寻找一种有效的方法来执行类似此伪代码的操作。
public interface INormalizedObject{
void someMethodThatHappensToNormalizedObjects();
T NormalizeObject(T obj) where T : derives from INormalizedObject;
}
具体来说,如何在 NormalizeObject 方法 returns 基 INormalizedObject 类型的对象的接口上设置类型约束?
如果您希望 T
表示 "the type that implements this interface",您可以使接口通用:
public interface INormalizedObject<T>
where T : INormalizedObject<T>
{
T NormalizeObject(T obj);
}
然后实施:
public class Foo : INormalizedObject<Foo>
{
public Foo NormalizeObject(Foo obj)
{
}
}
但是你实际上似乎要求的只是这个:
public interface INormalizedObject
{
INormalizedObject NormalizeObject(INormalizedObject obj);
}
因为这就是您的代码应该知道的全部内容。
我认为你不能在这里使用这个词,因为它要求你的方法是静态的。
你能试试这个吗
public interface INormalizedObject
{
void someMethodThatHappensToNormalizedObjects();
T NormalizeObject<T>(T obj) where T : INormalizedObject;
}
我正在寻找一种有效的方法来执行类似此伪代码的操作。
public interface INormalizedObject{
void someMethodThatHappensToNormalizedObjects();
T NormalizeObject(T obj) where T : derives from INormalizedObject;
}
具体来说,如何在 NormalizeObject 方法 returns 基 INormalizedObject 类型的对象的接口上设置类型约束?
如果您希望 T
表示 "the type that implements this interface",您可以使接口通用:
public interface INormalizedObject<T>
where T : INormalizedObject<T>
{
T NormalizeObject(T obj);
}
然后实施:
public class Foo : INormalizedObject<Foo>
{
public Foo NormalizeObject(Foo obj)
{
}
}
但是你实际上似乎要求的只是这个:
public interface INormalizedObject
{
INormalizedObject NormalizeObject(INormalizedObject obj);
}
因为这就是您的代码应该知道的全部内容。
我认为你不能在这里使用这个词,因为它要求你的方法是静态的。 你能试试这个吗
public interface INormalizedObject
{
void someMethodThatHappensToNormalizedObjects();
T NormalizeObject<T>(T obj) where T : INormalizedObject;
}