2010-09-08 20 views
31

Garip bir C# kenarına rastladım ve iyi bir iş arıyorum. Ben kontrolünü yapmak bir sınıfta bu sınıftan miras istiyorumC# derleyicisi neden açık bir arabirim uygulaması ekler?

namespace OtherCompany 
{ 
    public class ClassIDoNotControl 
    { 
     public void SomeMethod(string argument) 
     { 
      Console.WriteLine((new StackFrame(1).GetMethod().Name)); 
     } 
    } 
} 

:

Bunu şöyle kontrol etmiyoruz bir sınıf yoktur. Ayrıca, üzerinde bir arabirim belirtmek istiyorum: Ben "ClassIDoNotControl" taşırsanız,

namespace MyCompany 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      IInterfaceIDoControl i = new ClassIDoControl(); 
      i.SomeMethod("Hello World!"); // Prints "Main" 
     } 
    } 
} 

Ama:

interface IInterfaceIDoControl 
{ 
    void SomeMethod(string argument); 
} 

class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl 
{ 
} 

Bu dosyaların tümü aynı montaj iseniz, her şey iyi çalışıyor başka bir meclise, beklediğimi anlamadım. Bunun yerine, ekstra bir yığın çerçevesi ima eden çıktı için "My Company.IInterfaceIDoControl.SomeMethod" ifadesini görüyorum.

nedeni örtüler altında, C# derleyicisi bu gibi görünmeye "ClassIDoControl" değiştiği anlamına geliyor:

class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl 
{ 
    void IInterfaceIDoControl.SomeMethod(string argument) 
    { 
     base.SomeMethod(argument); 
    } 
} 

açıkça uygulanır arayüzlerle dolaylama bu derleyici tarafından oluşturulan ekstra bir katman önlemenin bir yolu var mı ?

+2

İlk durumda çalıştığına şaşırdım. – Grzenio

cevap

İlgili konular