我想在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)
我可以强制实现类返回自己类型的对象吗?如果可能的话,怎么样?或者泛型是答案吗?
注意:代码只是一个例子,而不是应该运行的东西.
泛型就是答案.
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)
不在接口声明中,没有.你可以管理的最好的是泛型:
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引用的具体类型?我认为你正试图将接口用于他们不应该做的事情......
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |