如果我有

public class AImplementation:IAInterface
{
   void IAInterface.AInterfaceMethod()
   {
   }

   void AnotherMethod()
   {
      ((IAInterface)this).AInterfaceMethod();
   }
}

如何在不进行显式转换的情况下从AInterfaceMethod()调用AnotherMethod()

最佳答案

许多答案表明您不能。他们是不正确的。有许多不使用强制转换运算符的方法。

技术#1:使用“as”运算符代替强制转换运算符。

void AnotherMethod()
{
    (this as IAInterface).AInterfaceMethod();  // no cast here
}

技术2:通过局部变量使用隐式转换。
void AnotherMethod()
{
    IAInterface ia = this;
    ia.AInterfaceMethod();  // no cast here either
}

技术#3:编写扩展方法:
static class Extensions
{
    public static void DoIt(this IAInterface ia)
    {
        ia.AInterfaceMethod(); // no cast here!
    }
}
...
void AnotherMethod()
{
    this.DoIt();  // no cast here either!
}

技术#4:介绍一个助手:
private IAInterface AsIA => this;
void AnotherMethod()
{
    this.AsIA.IAInterfaceMethod();  // no casts here!
}

10-07 23:02