8

我对如何在以下代码中调用特定接口的方法(比如 IA 或 IB 或 In ...)有疑问。请帮助我如何打电话。我已经注释了我声明接口方法“公共”的代码行,在这种情况下它可以工作。当我明确声明时,我不知道如何调用它:(我正在学习 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();
        }
    }
4

4 回答 4

15

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

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

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

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

        Console.ReadLine();
    }
于 2013-02-25T20:49:23.180 回答
3

将调用的方法取决于调用它的类型。例如:

请注意,为了清楚起见,我创建了两个项目。但实际上,您不想这样做,您应该只在类型之间转换对象。

static void Main(string[] args)
{
    // easy to understand version:
    IA a = new Model();
    IB b = new Model();

    a.Display();
    b.Display();

    // better practice version:
    Model model = new Model();

    (IA)model.Display();
    (IB)model.Display();
}

interface IA
{
    void Display();
}

interface IB
{
    void Display();
}

class Model : IA, IB
{
    void IA.Display()
    {
        Debug.WriteLine("I am from A");
    }

    void IB.Display()
    {
        Debug.WriteLine("I am from B");
    }            
}

输出:

I am from A
I am from B
于 2013-02-25T20:50:09.733 回答
2

您需要为此过程使用显式接口实现

但是,如果两个接口成员不执行相同的功能,则可能导致其中一个或两个接口的实现不正确。可以显式地实现接口成员——创建一个只通过接口调用的类成员,并且特定于该接口。这是通过使用接口名称和句点命名类成员来完成的。

interface IA
{
   void Display();
}
interface IB
{
   void Display();
}

    public class Program:IA,IB
    {

        void IA.Display()
        {
            Console.WriteLine("I am from A");
        }

        void IB.Display()
        {
            Console.WriteLine("I am from B");
        }

        public static void Main(string[] args)
        {
           IA p1 = new Program();
           p1.Display();
           IB p2 = new Program();
           p2.Display();
        }
    }

输出将是:

I am from A
I am from B

这是一个演示

于 2013-02-25T20:50:42.240 回答
2

为了调用显式接口方法,您必须持有对该接口类型的引用或对其进行强制转换:

IB ib = new Model();
ib.Display();

IA ia = (IA)ib;
ia.Display();
于 2013-02-25T20:55:25.263 回答