c# - C# 问题中的继承 - 是否可以覆盖内部方法?

标签 c# inheritance

是否可以覆盖内部方法的行为?

using System;

class TestClass
{
    public string Name { get { return this.ProtectedMethod(); } }

    protected string ProtectedMethod()
    {
        return InternalMethod();
    }

    string InternalMethod()
    {
        return "TestClass::InternalMethod()";
    }
}

class OverrideClassProgram : TestClass
{   // try to override the internal method ? (doesn't work)        
    string InternalMethod()
    {
        return "OverrideClassProgram::InternalMethod()";
    }

    static int Main(string[] args)
    {
        // TestClass::InternalMethod()
        Console.WriteLine(new TestClass().Name);
        // TestClass::InternalMethod() ?? are we just screwed?
        Console.WriteLine(new OverrideClassProgram().Name); 
        return (int)Console.ReadKey().Key;
    }
}

最佳答案

我认为您在这里有些困惑。有一个实际关键字“内部”,这是您想要的吗?

internal string InternalMethod()
{
    return "TestClass::InternalMethod()";
}

但我认为您真正要寻找的是“虚拟”关键字。这允许您进行覆盖: 父类

protected virtual string InternalMethod()
{
    return "TestClass::InternalMethod()";
}

子类

protected override string InternalMethod()
{
    return "TestProgram::InternalMethod()";
}

使用“new”关键字是有效的,但它完全重新实现了该方法。 IE。它打破了多态性。

编辑: 这是一个 link .

关于c# - C# 问题中的继承 - 是否可以覆盖内部方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2564425/

相关文章:

ffmpeg - 我可以使用 ffmpeg 将 JPEG 输出到内存流而不是文件吗?

c# - 在 web 服务的情况下如何从 WSDL 生成代理类

c# - 类型为 'Newtonsoft.Json.Linq.JObject' 的对象无法转换为类型

c# - 在 WPF C# 中将值从一个窗口传递到另一个窗口时出现问题

c++ - c++中继承的构造函数

c# - 通过 C# 通过 Outlook 2010 发送电子邮件

c# - 如何使文本框在 Windows 8 中只接受数字和一位小数

javascript - 如何在 JavaScript 中进行原型(prototype)继承?

java - 如何连接两个不同的类

Swift:从父类(super class)访问自己的属性(property)