c# - 强制在基类内部调用基类虚方法

标签 c# .net oop inheritance

不要误会我的意思:我不想强制重写方法来调用基类,就像之前已经问过 1000 次一样:)

我想知道是否有任何方法可以强制调用基类内部方法的基类实现。

示例:

using System;

public class Program
{
    public static void Main()
    {
        var c = new SubClass();
        c.CallInfo();
    }

    internal class BaseClass {
        protected virtual void Info(){
            Console.WriteLine("BaseClass");
        }

        internal virtual void CallInfo() {
            this.Info();
        }
    }

    internal class SubClass : BaseClass {
        protected override void Info() {
            Console.WriteLine("SubClass");
        }

        internal override void CallInfo() {
            base.CallInfo();
        }
    }
}

输出显然是 SubClass 。有什么办法强制CallInfo方法BaseClass调用自己的Info方法,输出为 BaseClass

最佳答案

通过将您的 Info() 方法标记为 virtual,您明确要求发生这种类型的继承行为。

如果要确保基类中的方法调用不被重写,则需要使用非虚拟方法,例如

internal class BaseClass {
    protected virtual void Info(){
        this.FinalInfo();
    }

    protected void FinalInfo() {
        Console.WriteLine("BaseClass");
    }

    internal virtual void CallInfo() {
        this.FinalInfo();
    }
}

关于c# - 强制在基类内部调用基类虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53925886/

相关文章:

c# - 应用程序可以同时针对 3.5 和 4.5 .Net 版本吗?

.net - Xunit 以下构造函数参数没有匹配的夹具数据

algorithm - 在要求事先解决编程挑战时,statups 期望什么?

Python:如何使用类来绘制不同的线?

c# - 在 C# 应用程序中创建数据库

c# - 如何在变量值更改时触发事件?

c# - WPF .exe - 大文件大小

c# - 检查对象是否为 null 并在同一个 if 语句中比较对象的属性值是否安全?

matlab - 您能否获得 MATLAB 对象的唯一标识符?

c# - 有没有办法重构 C# 独有的 switch 语句?