c# - 内部抽象方法。为什么会有人拥有它们?

标签 c# inheritance abstract-class overriding access-modifiers

我今天正在做一些代码审查,发现了一些开发人员编写的旧代码。事情是这样的

public abstract class BaseControl
{
    internal abstract void DoSomething();
}

如果在同一个程序集中有一个派生类,它就可以工作

public class DerivedControl : BaseControl
{
    internal override void DoSomething()
    {
    }
}

但是在不同的程序集中派生基类会产生编译时错误

DerivedControl does not implement inherited abstract member 'BaseControl.DoSomething()

这让我开始思考。为什么会有人将方法声明为内部抽象?

最佳答案

最初的程序员希望派生控件可供客户端代码使用。但是要防止客户端继承和乱用虚方法。这不是一个坏主意,通常很容易通过重写方法并执行诸如忘记调用基类方法之类的操作来破坏基类。

关于c# - 内部抽象方法。为什么会有人拥有它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303591/

相关文章:

c# - 在 .NET Core 2 中创建 HttpClient 的最佳实践

C# 数字错误让我抓狂

c# - 根据概率从一系列值中随机选取一个数字

java - 类必须声明为抽象的或实现抽象方法?

javascript - ECMAScript 6 是否有抽象类的约定?

c# - 使用 DryWetMidi 从 MIDI 文件中读取每个音符(音符、力度、长度)

java - 具有接口(interface)的多重继承歧义

c++ - 使用纯多态性和继承从基类调用派生类上的函数而不进行强制转换?

python - python中的字段继承访问

java - Java中如何通过抽象类访问子类?