Конечно, это возможно, но для переопределения метода, метод должен быть virtual
или abstract
, такой же, как любая другая видимость.
class Base
{
internal virtual void Foo()
{
Console.WriteLine("Foo from Base");
}
}
class Derived : Base
{
internal override void Foo()
{
Console.WriteLine("Foo from Derived");
}
}
Когда вы используете ключевое слово new
, оно называется метод, скрывающий , что не одно и то же. Если я напишу это:
class Base
{
internal void Foo()
{
Console.WriteLine("Foo from Base");
}
}
class Derived : Base
{
internal new void Foo()
{
Console.WriteLine("Foo from Derived");
}
}
static void Main()
{
Base b = new Derived();
b.Foo();
}
Затем он выполнит метод Base
Foo
, а не Derived
. Другими словами, он напечатает Foo from Base
. В первом случае он все равно выполнил бы метод Derived
и напечатал Foo from Derived
.