有没有办法覆盖C#中的返回类型?如果是这样,如果不是为什么以及推荐的做法是什么?
我的情况是我有一个抽象基类的接口及其后代.我想这样做(确实不是,但作为一个例子!):
public interface Animal
{
Poo Excrement { get; }
}
public class AnimalBase
{
public virtual Poo Excrement { get { return new Poo(); } }
}
public class Dog
{
// No override, just return normal poo like normal animal
}
public class Cat
{
public override RadioactivePoo Excrement { get { return new RadioActivePoo(); } }
}
Run Code Online (Sandbox Code Playgroud)
RadioactivePoo当然继承自Poo.
我想要这样做的原因是,那些使用Cat对象的人可以使用该Excrement属性而不必Poo投入RadioactivePoo,例如,Cat仍然可能是Animal列表的一部分,用户可能不一定知道或关心他们的放射性便便.希望有意义......
据我所知,编译器至少不允许这样做.所以我想这是不可能的.但是你会推荐什么作为解决方案呢?
我有一个简单的方法设置来创建一个条目,如果它成功,返回创建的条目.如果没有返回ValidationError.
public async Task<MyNewEntry> CreateEntry(MyUser user, MyEntryRequest entry)
Run Code Online (Sandbox Code Playgroud)
如果条目有效,这很有用.但是,如果验证失败,我想返回ValidationError.
我试过这样做:
public async Task<MyNewEntry | ValidationError> CreateEntry(MyUser user, MyEntryRequest entry)
Run Code Online (Sandbox Code Playgroud)
但后来它没有编译.如何构造此方法,使其能够返回MyNewEntry或ValidationError