Açık Arabirim Uygulaması (C# Programlama Kılavuzu)Explicit Interface Implementation (C# Programming Guide)

Bir sınıf , aynı imzaya sahip bir üye içeren iki arabirim uygularsa, bu üyeyi sınıfında uygulamak, her iki arabirimin de uygulama olarak bu üyeyi kullanmasına neden olur.If a class implements two interfaces that contain a member with the same signature, then implementing that member on the class will cause both interfaces to use that member as their implementation. Aşağıdaki örnekte, tüm çağrıları aynı yöntemi çağırmak için Paint çağırır.In the following example, all the calls to Paint invoke the same method.

class Test 
{
    static void Main()
    {
        SampleClass sc = new SampleClass();
        IControl ctrl = sc;
        ISurface srfc = sc;

        // The following lines all call the same method.
        sc.Paint();
        ctrl.Paint();
        srfc.Paint();
    }
}


interface IControl
{
    void Paint();
}
interface ISurface
{
    void Paint();
}
class SampleClass : IControl, ISurface
{
    // Both ISurface.Paint and IControl.Paint call this method. 
    public void Paint()
    {
        Console.WriteLine("Paint method in SampleClass");
    }
}

// Output:
// Paint method in SampleClass
// Paint method in SampleClass
// Paint method in SampleClass

İki arabirim üyesi aynı işlevi gerçekleştirmez, ancak bu, arabirimlerin bir veya her ikisinin yanlış bir uygulamasına neden olabilir.If the two interface members do not perform the same function, however, this can lead to an incorrect implementation of one or both of the interfaces. Yalnızca arabirim aracılığıyla çağrılan ve bu arabirime özgü olan bir sınıf üyesi oluşturarak, bir arabirim üyesini açıkça uygulamak mümkündür.It is possible to implement an interface member explicitly—creating a class member that is only called through the interface, and is specific to that interface. Bu, sınıf üyesini arabirim adı ve nokta ile adlandırarak yapılır.This is accomplished by naming the class member with the name of the interface and a period. Örneğin:For example:

public class SampleClass : IControl, ISurface
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint");
    }
    void ISurface.Paint()
    {
        System.Console.WriteLine("ISurface.Paint");
    }
}

Sınıf üyesi IControl.Paint yalnızca IControl arabirim aracılığıyla kullanılabilir ve ISurface.Paint yalnızca ile ISurfacekullanılabilir.The class member IControl.Paint is only available through the IControl interface, and ISurface.Paint is only available through ISurface. Her iki yöntem uygulaması ayrı değildir ve doğrudan sınıfta kullanılamaz.Both method implementations are separate, and neither is available directly on the class. Örneğin:For example:

// Call the Paint methods from Main.

SampleClass obj = new SampleClass();
//obj.Paint();  // Compiler error.

IControl c = obj;
c.Paint();  // Calls IControl.Paint on SampleClass.

ISurface s = obj;
s.Paint(); // Calls ISurface.Paint on SampleClass.

// Output:
// IControl.Paint
// ISurface.Paint

Açık uygulama, her biri bir özellik ve bir yöntem gibi aynı ada sahip farklı Üyeler bildiren iki arabirimin da bulunduğu durumları çözümlemek için de kullanılır:Explicit implementation is also used to resolve cases where two interfaces each declare different members of the same name such as a property and a method:

interface ILeft
{
    int P { get;}
}
interface IRight
{
    int P();
}

Her iki arabirimi de uygulamak için bir sınıf, derleyici hatasından kaçınmak için P ya da Yöntem P ya da her ikisi için açık uygulamayı kullanmalıdır.To implement both interfaces, a class has to use explicit implementation either for the property P, or the method P, or both, to avoid a compiler error. Örneğin:For example:

class Middle : ILeft, IRight
{
    public int P() { return 0; }
    int ILeft.P { get { return 0; } }
}

Ayrıca bkz.See also