C# всегда вызывать базовый метод из базового класса
Предположим, что у нас есть следующие классы:
class A {
public virtual int Number { get { return 1; } }
public int Foo(){
return Number;
}
}
class B : A{
public override int Number { get { return 2; } }
}
Как и ожидалось, если я вызову метод Foo для экземпляра класса B, я получу 2. Возможно ли изменить метод Foo таким образом, чтобы он всегда использовал базовое свойство A.Number (и вернуть 1) Что-то вроде:
public int Foo(){
return A.Number;
}
2 ответа
Вы пытаетесь поместить "реальную" функциональность в виртуальный член, и пусть не виртуальный член предоставляет его не виртуальным способом. Это... на самом деле не собирается работать. Тем не менее, все, что вам нужно сделать, это изменить эту концепцию:
class A
{
public virtual int Number { get { return Foo(); } }
public int Foo()
{
return 1;
}
}
"Настоящее" определение заключается в не виртуальном члене, и виртуальный член просто вызывает его. Это гарантирует, что вы пишете функциональность только один раз, и в то же время демонстрируете ее как в виртуальной, так и в не виртуальной среде.
Вы можете использовать "базу" для использования методов и свойств класса А.
class B : A
{
public override int Number { get { return 2; } }
public new int Foo()
{
return base.Number;
}
}