在 C# 中使用派生返回类型覆盖抽象属性 [英] Overriding an abstract property with a derived return type in c#

查看:53
本文介绍了在 C# 中使用派生返回类型覆盖抽象属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有四门课.请求、DerivedRequest、处理程序、DerivedHandler.Handler 类有一个属性,声明如下:

I have four classes. Request, DerivedRequest, Handler, DerivedHandler. The Handler class has a property with the following declaration:

public abstract Request request { get; set; }

DerivedHandler 需要覆盖这个属性,以便它返回 DerivedRequest:

The DerivedHandler needs to override this property so that it returns DerivedRequest instead:

public override DerivedRequest request { get; set; }

有没有人对如何使这项工作有任何想法?

Does anyone have any ideas about how to make this work?

推荐答案

这并不是构建事物的好方法.执行以下其中一项

This isn't really a good way to structure things. Do one of the following

1) 只是不要更改返回类型,并在子类中正常覆盖它.在DerivedHandler 中,您可以使用Request 的基类签名返回DerivedRequest 的实例.如果需要,任何使用它的客户端代码都可以选择将其转换为 DerivedRequest.

1) Just don't change the return type, and override it normally in the subclass. In DerivedHandler you can return an instance of DerivedRequest using the base class signature of Request. Any client code using this can choose to cast it to DerivedRequest if they want to.

2) 如果泛型不应该是多态的,请改用泛型.

2) Use generics instead if they are not supposed to be polymorphic.

public abstract class HandlerBase<T> where T: Request
{
    public abstract T Request {get;set;}
}

public class Handler: HandlerBase<Request>()

public class DerivedHandler: HandlerBase<DerivedRequest>()

这篇关于在 C# 中使用派生返回类型覆盖抽象属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆