【发布时间】:2013-12-11 15:12:23
【问题描述】:
我正在尝试做这样的事情:
public abstract class A
{
public abstract AbstractSomething foobar {get;}
}
public class B : A
{
public override ConcreteSomething foobar
{
get
{
return new ConcreteSomething();
}
}
}
编译器警告我覆盖类型必须与基类型匹配。我对返回 AbstractSomething 的担忧是我要求用户正确转换返回的值。
实现我的 getter 的最佳方法是什么?不使用泛型是否可以做到这一点?
【问题讨论】:
-
这里有什么不使用接口的理由吗?
-
如果你使用抽象方法,那么第一点是你应该在派生类中定义抽象方法。
-
你为什么不使用泛型?
-
为什么用户必须投射它?如果他引用了你的
B,但只知道A,否则他不需要基类,他不能指望得到ConcreteSomething,而只能得到AbstractSomething(这就是抽象类@ 987654326@ 是承诺给他的),所以他根本不需要强制转换它,您可以在覆盖 getter 中返回抽象类。 -
添加到 pascalhein 的答案中,如果您的调用者希望使用比 AbstractSomething 具有更多功能的类来做某事,那么这不是一个合适的模式。
标签: c# types return overriding abstract