Вы можете использовать ключевое слово new
, чтобы получить другое определение того же (именованного) метода. В зависимости от типа ссылки вы вызываете A
из B
.
public class A
{
public void F()
{
Console.WriteLine( "A" );
}
}
public class B : A
{
public new void F()
{
Console.WriteLine( "B" );
}
}
static void Main( string[] args )
{
B b = new B();
// write "B"
b.F();
// write "A"
A a = b;
a.F();
}
Если вы чувствуете, что new
- это не правильное решение, вам следует написать два метода с отличительным именем.
Как правило, базовую реализацию нельзя вызывать извне класса, если метод правильно переопределен. Это концепция ОО. У вас должен быть другой метод . Есть четыре способа (я могу придумать), чтобы определить этот выдающийся метод:
- написать метод с другим именем.
- написать метод с тем же именем, но с другой подписью (аргументы). Это называется перегрузкой.
- написать новое определение метода с тем же именем (используйте ключевое слово
new
). Это называется скрытием.
- Поместите его в интерфейсы и реализуйте хотя бы один явно. (аналогично
new
, но на основе интерфейса)