2009-08-23 46 views
4

按照MSDN文檔界面內可以是一個類或命名空間的成員:C# - 接口類

例如,我可以聲明:

public class Test 
{ 
    public interface IMemberofTest 
    { 
     void get(); 
    } 
} 

什麼用內部具有接口的一類?它不會破壞真正的界面使用的目的嗎?

回答

7

該類是另一個命名空間。 因此,該接口可用於強制在類中的方法之間傳遞的數據上籤訂合同,或者僅用於更精確地限定接口範圍。

2

如果出於某種原因,該接口僅在該類的上下文中才有意義,並且您希望通過像這樣實現它來清除它,則不是這樣。

我必須說,我從來沒有使用這個構造一次,因爲它是值得的。

3

當你想在課堂上分解東西時,它們很有用。

public class Invoice 
    { 
     public String Print(Type type) 
     { 
      IPrinter printer = null; 
      switch (type) 
      { 
       case Type.HTML: 
        printer = new HtmlPrinter(this); 
        break; 
       case Type.PDF: 
        printer = new PdfPrinter(this); 
        break; 
       default: 
        throw new ArgumentException("type"); 
      } 

      printer.StepA(); 
      printer.StepB(); 
      printer.StepC(); 

      return printer.FilePath; 
     } 


     private interface IPrinter 
     { 
      void StepA(); 
      void StepB(); 
      void StepC(); 
      String FilePath { get; } 
     } 

     private class HtmlPrinter : IPrinter 
     { 
      //Lots of code 
     } 

     private class PdfPrinter : IPrinter 
     { 
      //Lots of code 
     } 

     public enum Type 
     { 
      HTML, 
      PDF 
     } 
    } 
+0

個人而言,我不是一個代碼文件中許多類的粉絲 - 我發現它只是使事情很難找到。 – Paddy 2009-08-23 09:38:44

+1

在這種情況下,不依賴注入是否更好?通過這種方式,您可以讓任何打印者決定打印的方式(只要實施IPrinter),從而降低發票的複雜性,同時允許使用比HTML和PDF更多類型的打印機(例如模擬) 。 – 2009-08-23 09:58:36