wake-up-neo.com

Vererbung von mehreren Schnittstellen mit demselben Methodennamen

Wenn wir eine Klasse haben, die von mehreren Schnittstellen erbt und die Schnittstellen Methoden mit demselben Namen haben, wie können wir diese Methoden in meiner Klasse implementieren? Wie können wir festlegen, welche Methode von welcher Schnittstelle implementiert wird?

60
masoud ramezani

Durch explizites Implementieren der Schnittstelle wie folgt:

public interface ITest {
    void Test();
}
public interface ITest2 {
    void Test();
}
public class Dual : ITest, ITest2
{
    void ITest.Test() {
        Console.WriteLine("ITest.Test");
    }
    void ITest2.Test() {
        Console.WriteLine("ITest2.Test");
    }
}

Bei der Verwendung expliziter Schnittstellenimplementierungen sind die Funktionen für die Klasse nicht öffentlich. Um auf diese Funktionen zugreifen zu können, müssen Sie das Objekt zuerst in den Schnittstellentyp umwandeln oder einer der für den Schnittstellentyp deklarierten Variablen zuweisen.

var dual = new Dual();
// Call the ITest.Test() function by first assigning to an explicitly typed variable
ITest test = dual;
test.Test();
// Call the ITest2.Test() function by using a type cast.
((ITest2)dual).Test();
86
Pete
10
Gopher

Sie können eine oder beide dieser Schnittstellen implementieren explizit .

Angenommen, Sie haben folgende Schnittstellen:

public interface IFoo1
{
    void DoStuff();
}

public interface IFoo2
{
    void DoStuff();
}

Sie können beide so implementieren:

public class Foo : IFoo1, IFoo2
{
    void IFoo1.DoStuff() { }

    void IFoo2.DoStuff() { }        
}
8
Mark Seemann

Manchmal müssen Sie sogar Folgendes tun:

public class Foo : IFoo1, IFoo2
{
    public void IFoo1.DoStuff() { }

    public void IFoo2.DoStuff()
    {
        ((IFoo1)this).DoStuff();
    }        
}
3
Sebastian

Sie können eine Schnittstelle explizit implementieren und eine andere in weitem Umfang .

public interface ITest {
    void Test();
}
public interface ITest2 {
    void Test();
}
public class Dual : ITest, ITest2
{
    public void Test() {
        Console.WriteLine("ITest.Test");
    }
    void ITest2.Test() {
        Console.WriteLine("ITest2.Test");
    }
}

ITest.Test ist die Standardimplementierung.

Dual dual = new Dual();
dual.Test();
((ITest2)dual).Test();

Ausgabe:

Console.WriteLine("ITest.Test");
Console.WriteLine("ITest2.Test");
2
Bimal Das
public interface IDemo1
{
 void Test();
}
public interface IDemo2
{
 void Test();
}
public class clsDerived:IDemo1,IDemo2
{
  void IDemo1.Test() 
  {
   Console.WriteLine("IDemo1 Test is fine");
  }
 void IDemo2.Test() 
  {
    Console.WriteLine("IDemo2 Test is fine");
  }
}

public void get_methodes()
{
    IDemo1 obj1 = new clsDerived();
    IDemo2 obj2 = new clsDerived();
    obj1.Test();//Methode of 1st Interface
    obj2.Test();//Methode of 2st Interface
}
2
Ranajit kumar
public class ImplementingClass : AClass1, IClass1, IClass2

    {
        public override string Method()
        {
            return "AClass1";
        }
        string IClass1.Method()
        {
            return "IClass1";
        }
         string IClass2.Method()
        {
            return "IClass2";
        }
    }

Wenn Sie also aus einer anderen Klasse aufrufen, müssen Sie das Objekt in die erforderliche Interface- oder Abstract-Klasse umwandeln.

ImplementingClass implementingClass = new ImplementingClass();
((AClass1)implementingClass).Method();
1
Rohit.P

Antwort ist " Durch explizite Schnittstellenimplementierung "

Nimm ein Beispiel:

using System;

interface A

{
        void Hello();
}

interface B

{
    void Hello();
}


class Test : A, B

{
    void A.Hello()

    {
        Console.WriteLine("Hello to all-A");
    }

    void B.Hello()
    {
        Console.WriteLine("Hello to all-B");

    }

}

public class interfacetest

{
    public static void Main()

    {
        A Obj1 = new Test();

        Obj1.Hello();

        B Obj2 = new Test();

        Obj2.Hello();
    }

}

Ausgabe: Hallo an alle-A Hallo an alle-B

0
Vinayak Savale