我正在尝试做这样的事情:
public abstract class A
{
public abstract AbstractSomething foobar {get;}
}
public class B : A
{
public override ConcreteSomething foobar
{
get
{
return new ConcreteSomething();
}
}
}
编译器警告我,重写类型必须与基类型匹配。我对返回AbstractSomething的关注是我要求用户正确地转换返回的值。
实施我的getter最好的方法是什么?是否可以在不使用泛型的情况下执行此操作?
答案 0 :(得分:3)
是否可以在不使用泛型的情况下执行此操作?
不。使用泛型:
public abstract class A<T>
where T : AbstractSomething
{
public abstract T foobar { get; }
}
public class B : A<ConcreteSomething>
{
public override ConcreteSomething foobar
{
get
{
return new ConcreteSomething();
}
}
}
答案 1 :(得分:3)
您确实需要使用泛型,但这不是一个糟糕的解决方案:
public abstract class A<T> where T:AbstractSomething
{
public abstract T foobar { get; }
}
public abstract class AbstractSomething
{
}
public class ConcreteSomething : AbstractSomething
{
}
public class B : A<ConcreteSomething>
{
public override ConcreteSomething foobar
{
get
{
return new ConcreteSomething();
}
}
}
答案 2 :(得分:2)
您可以使用泛型来指定它,尽管这确实使某些事情更难处理:
public abstract class A<T> where T : AbstractSomething
{
public abstract T foobar {get;}
}
public class B : A<ConcreteSomething>
{
public override ConcreteSomething foobar
{
get
{
return new ConcreteSomething();
}
}
}