gpt4 book ai didi

c# - 如何强制从抽象类继承的类不使用其基类?

转载 作者:行者123 更新时间:2023-12-03 07:54:19 25 4
gpt4 key购买 nike

请不要关注糟糕的整体设计 我正在处理 C#、EF 驱动的 API,其中原始程序员对所有内容进行同步编程,这导致性能极差。我将所有内容都转换为异步 1:1,这造成了一些设计模式问题。

问题之一是所有映射器类都直接从接口(interface)继承,例如:

Interface IConvertThings<T,S>()
{
public Task<T> ConvertTo(S object);
public Task<T> ConvertFrom(T object);
}

我们已经面临的一个问题是,我们有多个重复的代码,其中一个没有值(即您可以 ConvertTo 但不能 ConvertFrom,反之亦然)。为了解决这个问题,我为所有其他涉及的对象创建了一个抽象类来继承:

public abstract class AConvertThings<T,S> : IConvertThings<T,S>
{
public Task<T> ConvertTo(S object) { throw new NotImplementedException(); }
public Task<S> ConvertFrom(T object) { throw new NotImplementedException(); }
}

转换类现在全部继承自 AConvertThings。目的是,如果转换类中未定义方法(使用“new”隐藏原始方法),我们将调用 AConvertThings 方法并报告错误,并让开发人员知道他们在该方法上调用了不完整的方法转换器(因为有些只能单向转换)。

我遇到的问题是,即使在继承类上使用 new 关键字,AConvertThings 类也会在运行时被调用,当继承类具有完全完整的堆栈时会抛出错误。

public async new Task<TYPE> ConvertTo(OTHERTYPE object)我忽略了什么?

最佳答案

如果我理解正确的话,您想要覆盖支持相互转换的派生类中的ConvertToConvertFrom方法。

使用new关键字不会覆盖任何方法,它只是隐藏(隐藏)它们显式。有关成员覆盖和隐藏之间行为差异的说明,请参阅此处: Overloading,Overriding and Hiding?

要使 ConvertToConvertFrom 可重写,请在 AConvertThings 基类中的方法上使用 virtual 关键字。任何希望重写其中一个或两个方法的派生类都将使用 override 关键字。 (https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/virtual)

关于c# - 如何强制从抽象类继承的类不使用其基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76442271/

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