全面的に分析します.C〓というインタフェースのプログラミングの定義インターフェース.


技術的には,インターフェースは関数型法を含むデータ構造のセットである.このデータ構造により、クライアントコードはコンポーネントオブジェクトの機能を呼び出すことができます.インターフェースを定義する一般的な形式は、
[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
説明:・atributes(オプション):付加的な定義性情報.modifiers(オプション):許可された修飾子はnewと4つのアクセス修繕子があります.new、public、protected、internal、prvateです.一つのインターフェース定義において、同じ修繕子は何回も出現することができません.new修繕子は入れ子インターフェースにしか現れません.継承された同名のメンバーをカバーしています.The public、protected、internal、and privte修繕符はインターフェースへのアクセス権限を定義しました.インジケータとイベント.identifer:インターフェース名.base-list(オプション):1つ以上の明示的なベースインターフェースのリストを含み、インターフェース間はカンマで区切られます.インターフェースメンバーの定義?インターフェースは名前空間またはクラスのメンバーとすることができ、以下のメンバーの署名を含むことができる.1つのインターフェースは、1つまたは複数のベースインターフェースから継承され得る.インタフェースという概念はC〓〓とJavaの中で非常に似ています.インターフェースのキーワードはインターフェースで、一つのインターフェースは一つ以上の他のインターフェースを拡張できます.インターフェースの名前は大文字「I」で始まるのが慣例です.下記のコードはC〓〓〓インターフェースの一例で、Java中のインターフェースと全く同じです.
interface IShape  { 
    void Draw ( ) ;
}
二つ以上のインターフェースから派生した場合、親インターフェースの名前リストはカンマで区切られます.
interface INewInterface: IParent1, IParent2 { }
しかし、Javaとは違って、Cピラー内のインターフェースはドメイン(Field)を含んではいけない.また、C〓〓では、インターフェース内のすべての方法がデフォルトでは共通の方法であることに注意してください.Javaにおいて、方法定義は、public修飾子を有することができる(これが必要ではないとしても)が、C〓では、明示的にインターフェースとする方法でpublic修飾子を指定することは違法である.例えば、下記のC葃インターフェースはコンパイルエラーを発生します.
interface IShape { public void Draw( ) ; }
以下の例はIControlというインターフェースを定義しています.インターフェースにはメンバー方法Paintが含まれています.
interface IControl {
void Paint( ) ;
}
次の例では、インターフェースIInterfaceは、2つの基幹インターフェースIBase 1およびIBase 2から継承される.
interface IInterface: IBase1, IBase2 {
   void Method1( ) ;
   void Method2( ) ;
}
インターフェースはクラスによって実現できます.実装されたインターフェースの識別子は、クラスのベースリストに表示される.たとえば:
class Class1: Iface1, Iface2 {
   // class   。
}
クラスのベースリストにベースクラスとインターフェースが同時に含まれている場合、リストに最初に表示されるのはベースクラスです.たとえば:
class ClassA: BaseClass, Iface1, Iface2 {
   // class  。
}
以下のコードセグメントはインターフェースIFaceを定義します.一つの方法しかありません.
interface IFace {
  void ShowMyFace( ) ;
}
この定義からオブジェクトを例示することはできませんが、1つのクラスに派生することができます.したがって、このクラスはShowMyFaceの抽象的な方法を実現しなければならない.
class CFace:IFace
{
  public void ShowMyFace( )   {
    Console.WriteLine(" implementation " ) ;
   } 
}
  基本インターフェースの一つのインターフェースは、このインターフェースと呼ばれる明示的なベースインターフェースをゼロまたは複数のインターフェースから継承することができる.一つのインターフェースが0より多い明示的なベースインターフェースがある場合、インターフェースの定義の中の形式は、インターフェース識別子の後にあるコロン「:」とカンマ「で」によって分離されたベースインターフェース識別子のリストである.インターフェースベース:インターフェースタイプのリスト説明:・一つのインターフェースの明示的なベースインターフェースは少なくともインターフェース自体と同じようにアクセスできる必要がある.例えば、1つの共通インターフェースのベースインターフェースでプライベートまたは内部のインターフェースを指定するのはエラーです.一つのインターフェースが直接または間接的にそれから自分で継承するのは間違いです.界面の基本インターフェースはいずれも明示的なベースインターフェースであり,それらの基本インターフェースである.言い換えれば,基底インターフェースの集合は,明示的な基底インターフェースやそれらの明示的な基底インターフェースなどから完全に構成されている.次の例では
interface IControl {
	void Paint( ) ;
}
interface ITextBox: IControl {
	void SetText(string text) ;
}
interface IListBox: IControl {
	void SetItems(string[] items) ;
}
interface IComboBox: ITextBox, IListBox { }
IComboboxの基本インターフェースはIControlで、IText BoxとIlistBoxです.一つのインターフェースはその基本インターフェースの全メンバーを継承します.言い換えれば、上のインターフェースIComboboboxはPaintのようにメンバーSetTextとSetItemsを継承します.一つはインターフェースのクラスまたは構造を実現し、すべてのインターフェースのベースインターフェースも暗黙的に実現した.インターフェース本体の一つのインターフェースの主体はインターフェースのメンバーを定義する.
interface-body:
{   interface-member-declarationsopt   }
    インターフェースを定義するインターフェースは、方法、属性、インデックス・インジケータおよびイベントであってもよいが、定数、ドメイン、オペレータ、コンフォメーション関数またはコンフォメーション関数ではなく、任意のスタティックメンバを含んではいけない1つ以上のメンバを含むことができる.インターフェース定義は、新しい定義空間を作成し、インターフェース定義が直接に含むインターフェースメンバー定義は、新しいメンバを定義空間に導入する.説明:・インターフェースのメンバーは、ベースインターフェースから継承されるメンバーと、インターフェース自体で定義されるメンバーです.インターフェース定義は、ゼロまたは複数のメンバを定義することができる.インターフェースのメンバーは、方法、属性、イベントまたはインデックスでなければならない.インターフェースは定数、フィールド、演算子、インスタンスのコンストラクタ、コンストラクタまたはタイプを含んではいけません.また、任意の種類の静的メンバも含んではいけません.インターフェースは、可能な種類ごとに1つのメンバを含むインターフェースを定義します.方法、属性、イベント、およびインデクス.インターフェースメンバーのデフォルトアクセス方式はpublicです.インターフェースのメンバー定義は、メンバー定義の前にabstract、public、protected、internal、prvate、virtual、overrideまたはstatic修正子を入れてはいけません.インターフェースのメンバー同士は互いに同名ではいけません.継承されたメンバーは再定義されなくてもいいですが、インターフェースは継承されたメンバーと同名のメンバーを定義できます.この時、インターフェースのメンバーは継承されたメンバーをカバーしています.これは間違いを招くことはないですが、コンパイラは警告を与えます.警告メッセージをオフにする方法は、メンバー定義の前にnewキーワードを追加します.しかし、親インターフェースのメンバーをカバーしていない場合、newキーワードを使うと、コンパイラから警告が出ます.メソッドの名前は、同じインターフェースで定義されているすべての属性とイベントの名前とは異なる必要があります.さらに、方法の署名は、同じインターフェースで定義されている他のすべての方法の署名とは異なる必要がある.属性またはイベントの名前は、同じインターフェースで定義されている他のメンバーの名前とは異なる必要があります.インデックスの署名は、同じインターフェースで定義されている他のすべてのインデックスの署名と区別しなければなりません.インターフェース方法宣言における属性(atributes)は、タイプ(return-type)に戻り、識別子(identifeier)および形式パラメータリスト(formal-parameter-lis)は、1つのクラスの方法声明の中のそれらと同じ意味を持つ.一つのインターフェース方法は、一つの方法の本体を指定することができないと宣言していますが、通常は一つのセミコロンで終了します.インタフェース属性宣言のアクセス記号は、クラス属性宣言のアクセス符に対応しており、アクセスキー本体以外は通常、セミコロンを使用しなければならない.したがって、属性に関係なく、読み書き、読み取り専用、または書き込みのみでアクセスが完全に確定されます.インターフェースインデックス宣言の属性、タイプ、および形式パラメータリスト(formal-parameter-list)は、クラスの索引宣言のそれらと同じ意味があります.以下の例では、インターフェースIMyTestは、インデックスインジケータ、イベントE、方法F、属性Pのメンバーを含む.
interface IMyTest{
    string this[int index] { get; set; }
    event EventHandler E ;
    void F(int value)  ;
    string P { get; set; }
}
public delegate void EventHandler(object sender, EventArgs e) ;
次の例では、インターフェースIStringListは、各可能なタイプのメンバーのインターフェースを含む.方法、属性、イベント、およびインデックス.
public delegate void StringListEvent(IStringList sender);
public interface IStringList
{
	void Add(string s);
	int Count { get; }
	event StringListEvent Changed;
	string this[int index] { get; set; }
}
  インターフェースメンバーのフルネーム使用インターフェースメンバーは、フルネームを使用することもできます.インターフェースの全権名称はこのように構成されています.インターフェース名に小さなドット「.」を追加してメンバー名と例えば次の二つのインターフェースに対して:
interface IControl {
    void Paint( ) ;
}
interface ITextBox: IControl {
    void GetText(string text) ;
}
Paintの全権名はIControl.Paintであり、GetTextの全権名はIText Box.GetTextである.もちろん、全権名のメンバー名は、IText Box.Paintを使用するなど、インターフェースで定義されている必要があります.インターフェースが名前空間のメンバーであれば、名前空間の名前も含めなければなりません.
namespace System
{
    public interface IDataTable {
        object Clone( ) ;
    }
}
CloneメソッドのフルネームはSystem.IDaTable.Cloneです.