gpt4 book ai didi

c# - 是否可以在继承类中覆盖抽象父类的嵌套类定义?

转载 作者:行者123 更新时间:2023-12-04 02:29:29 27 4
gpt4 key购买 nike

上下文

我有一个场景,我希望定义几个 Bar 类,每个类都必须定义 RequestResponse自己的错误类。为此,我编写了一个抽象的 Foo 类,旨在强制实现。

RequestResponseError 共享一个基类PDU,并且必须实现它们各自的接口(interface)。每个 Bar 都需要一个足够独特的 RequestResponseError,它们必须独立定义。

此外,每个 BarRequestResponseError 不应在 之外实例化code>Bar,所以类定义应该嵌套似乎是正确的(至少对我而言)。

问题

是否可以覆盖子项中的嵌套类定义,继承自抽象父项?或者至少通过另一种方法实现同样的目标?

非法示例

下面是我希望如何编写的非法代码示例:

public abstract class Foo
{
public class Request: PDU, IRequest
{ }

public class Response : PDU, IResponse
{ }

public class Error : PDU, IException
{ }
}

public class Bar : Foo
{
public override Request
{
// Definition of Request goes here
}

public override Response
{
// Definition of Response goes here
}

public override Error
{
// Definition of Error goes here
}
}

最佳答案

无法覆盖嵌套类,因此您当前的方法将行不通。但是,我认为这就是您要实现的目标。

我的建议是使用接口(interface)和泛型。假设您有 3 个接口(interface):

public interface IRequest
{
//snip
}
public interface IResponse
{
//snip
}

public interface IException
{
//snip
}

现在你可以让你的基类看起来像这样:

public abstract class BaseThing<TRequest, TResponse, TError>
where TRequest : IRequest
where TResponse : IResponse
where TError : IException
{
// An example method
public abstract TResponse GetThing(TRequest request);
}

现在你可以对上面的东西做一些具体的定义了:

public class FooRequest : IRequest
{
//snip
}

public class FooResponse : IResponse
{
//snip
}

public class FooError : IException
{
//snip
}

public class FooThing : BaseThing<FooRequest, FooResponse, FooError>
{
public override FooResponse GetThing(FooRequest request)
{
//snip
}
}

关于c# - 是否可以在继承类中覆盖抽象父类的嵌套类定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65249366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com