2009-08-23 4 views

答えて

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

個人的に私は1つのコードファイル内に多くのクラスのファンではありません。 – Paddy

+1

この場合、依存性注入はより良い選択肢になりませんか?そのようにすれば、Print(印刷)を呼び出す人は、(IPrinterが実装されている限り)どのような方法で印刷すべきかを決めることができ、インボイスの複雑さを軽減すると同時に、HTMLやPDFよりも多くの種類のプリンタが可能になります。 –

関連する問題