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

呼び出されるメソッドは、それを呼び出すタイプによって異なります。例えば:

わかりやすくするために、2 つの項目を作成することに注意してください。ただし、実際には、これを行う必要はありません。型間でオブジェクトをキャストする必要があります。

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

このプロセスには、明示的なインターフェイスの実装を使用する必要があります。

ただし、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 に答える