我可以强制实现类返回自己类型的对象吗?

Cro*_*ros 5 c# interface

我想在C#中创建一个接口,定义一个总是返回实现类对象的方法,因此:

public interface IParser {
    IParser Parse(string s);
}

public class Parser : IParser {
    public Parser Parse(string s) {
        return new Parser(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以强制实现类返回自己类型的对象吗?如果可能的话,怎么样?或者泛型是答案吗?

注意:代码只是一个例子,而不是应该运行的东西.

Ben*_*nyM 8

泛型就是答案.

public interface IParser<T> where T:IParser<T> {
    T Parse(string s);
}

public class Parser : IParser<Parser> {
    public Parser Parse(string s) {
        return new Parser(s);
    }
}
Run Code Online (Sandbox Code Playgroud)


Fac*_*Vir 5

不在接口声明中,没有.你可以管理的最好的是泛型:

public interface IParser<T>
    where T: IParser<T>
{
    T Parse(string s);
}

public class Parser
 : IParser<Parser>
{
    public Parser Parse(string s)
    {
       return new Parser(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

这并不强制实现返回它自己的类型,但至少它允许它这样做.这就是IClonable接口从其Clone方法返回对象而不是特定类型的原因.

- - 编辑 - -

在这个问题上要记住的事情:让我们说我的代码,你对它的实现没有任何了解,返回一个IParser,你的代码调用Parse方法.您希望返回什么对象,而不知道返回IParser引用的具体类型?我认为你正试图将接口用于他们不应该做的事情......