是否可以覆盖内部方法的行为?
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/