相关疑难解决方法(0)

C#:覆盖返回类型

有没有办法覆盖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列表的一部分,用户可能不一定知道或关心他们的放射性便便.希望有意义......

据我所知,编译器至少不允许这样做.所以我想这是不可能的.但是你会推荐什么作为解决方案呢?

c# inheritance types overriding covariance

73
推荐指数
5
解决办法
5万
查看次数

dotnet返回2种类型中的1种

我有一个简单的方法设置来创建一个条目,如果它成功,返回创建的条目.如果没有返回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)

但后来它没有编译.如何构造此方法,使其能够返回MyNewEntryValidationError

.net c#

2
推荐指数
1
解决办法
60
查看次数

标签 统计

c# ×2

.net ×1

covariance ×1

inheritance ×1

overriding ×1

types ×1