如何在C#中调用特定的显式声明的接口方法

Lea*_*ner 5 .net c# interface

我对如何在以下代码中调用特定接口的方法(Say IA或IB或In ...)有疑问.请帮我解决如何打电话.我已经注释了代码行,我声明接口方法"public",在这种情况下它可以工作.当我明确宣布时,我不知道如何调用它:(我正在学习C#....

interface IA
    {
        void Display();
    }
    interface IB
    {
        void Display();
    }
    class Model : IA, IB
    {
        void IA.Display()
        {
            Console.WriteLine("I am from A");
        }
        void IB.Display()
        {
            Console.WriteLine("I am from B");
        }
        //public void Display()
        //{
        //    Console.WriteLine("I am from the class method");
        //}

        static void Main()
        {
            Model m = new Model();
            //m.Display();
            Console.ReadLine();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 13

要调用显式接口方法,您需要使用正确类型的变量,或直接转换为该接口:

    static void Main()
    {
        Model m = new Model();

        // Set to IA
        IA asIA = m;
        asIA.Display();

        // Or use cast inline
        ((IB)m).Display();

        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

  • 也许 (m as IB).Display() 会更具可读性,+1 (4认同)
  • `(m as IB).Display()`不是更好,因为它带有错误的语义.如果你知道'T`类型`T`总是使用`(T)x`.`x as T`用于'x`可能是`T`类型的情况,然后通过测试你是否得到'null`来检查. (3认同)