Метод не является общедоступным или защищенным, он является приватным, как вы его определили, и даже более приватным, чем просто private
, он доступен только при переходе через интерфейс.
Это означает, что для вызова метода вам необходимо:
К сожалению, с этим последним синтаксисом вы на самом деле не будете вызывать «base.Alan», а просто «this.Alan», что может иметь значение, если вы также переопределите этот метод в классе-потомке.
Вот пример:
using System;
namespace interfaceClass
{
public interface ITest
{
void Execute();
}
public class Base : ITest
{
void ITest.Execute()
{
Console.Out.WriteLine("Base.ITest.Execute");
}
}
public class Descendant : Base, ITest
{
void ITest.Execute()
{
Console.Out.WriteLine("Descendant.ITest.Execute");
}
public void Test()
{
// There's no way to call "base.Execute()" here
((ITest)this).Execute();
}
}
class Program
{
static void Main(string[] args)
{
Descendant d = new Descendant();
d.Test();
}
}
}