Нет, это не так. По крайней мере, обычно - возможно, вы могли бы сделать это с отражением.
По сути, переопределив ITest
, B
говорит, что берет на себя полную ответственность за реализацию ITest.Test
внутри любого объекта типа B
- и вы даже не можете назвать его изнутри B
, что вы обычно могли бы сделать, если бы вы переопределяли обычным способом.
РЕДАКТИРОВАТЬ: Я только что доказал (хакерским способом), что вы можете назвать это с отражением:
using System;
public interface IFoo
{
void Foo();
}
public class Base : IFoo
{
void IFoo.Foo()
{
Console.WriteLine("Base");
}
}
public class Derived : Base, IFoo
{
void IFoo.Foo()
{
Console.WriteLine("Derived");
}
}
class Test
{
static void Main()
{
var map = typeof(Base).GetInterfaceMap(typeof(IFoo));
var method = map.TargetMethods[0]; // There's only one method :)
method.Invoke(foo, null);
}
}
Это печатает "База". Хотя это довольно ужасно - я бы отчаянно пытался это сделать ...