ホームページ >バックエンド開発 >C#.Net チュートリアル >C#インターフェース例を詳しく解説

C#インターフェース例を詳しく解説

Y2J
Y2Jオリジナル
2017-04-24 13:36:074595ブラウズ

1. C# インターフェイスの役割

使用法の概要: メソッドを含むインターフェイスを定義しますが、メソッドの特定の実装のためのコードはありません。次に、インターフェイスを継承するクラスで、インターフェイスのすべてのメソッドのコードを実装する必要があります。しかし、インターフェイスの役割をよく理解していない場合、インターフェイスを使用するのは不必要であると考えるのは、もちろん間違いです。インターフェースの役割については、インターネット上で、とても分かりやすく、しかも詳しく分析してくださった方がいらっしゃいます。

[csharp] view plain copy

<p></p><pre code_snippet_id="219991" snippet_file_name="blog_20140306_1_6634576" name="code" class="csharp">//我们定义一个接口  
public interface IBark    
{  
    void Bark();  
}

//別のクラスを定義し、IBark から継承し、その中に Bark() メソッドを実装する必要があります

public class Dog:IBark    
{  
    public Dog()  
    {}  
    public void Bark()  //实现其中的Bark()方法  
    {  
       Consol.write("汪汪");  
     }  
}

//次に、Dog のインスタンスを宣言して Bark() メソッドを呼び出しますDog Wangcai = new Dog ();

Wangcai .bark (); なぜインターフェイスを使用するのでしょうか? 実際の実装には Bark() がありません。では、インターフェースを使用する必要はないのでしょうか?

インターフェースの定義に関しては、インターフェースは実際にはクラス間の合意と制約です。 IBark インターフェイスを継承するすべてのクラスは Bark() メソッドを実装する必要があるため、クラス ユーザーの観点から見ると、クラスが IBark インターフェイスから継承していることがわかっていれば、Bark() メソッドを呼び出すことができます。 Bark() メソッドの実装方法に関係なく、自信を持って大胆に実行できます。たとえば、ユーザーが Cat クラスまたは Dog クラスを使用し、IBark から継承していることがわかっている場合は、Bark を直接呼び出すことができます。これら 2 つのクラスには Bark() メソッドの特定の実装が必要なので、クラス内の特定の実装を気にする必要はありません

設計の観点から見ると、複数のクラスを 1 つのクラス内に記述する必要があります。これらのクラスはより複雑であるため、作業負荷が比較的大きくなります。たとえば、プログラマ A は Dog クラスを定義し、プログラマ B は Cat クラスを作成します。この 2 つのクラスには何もありません。相互に関係しますが、ユーザーのニーズにより、両方に「呼び出し」メソッドを実装する必要があります。もう 1 つは、統合管理を容易にすることです。もちろん、インターフェイスを使用しなくても目的は達成できますが、このクラスに Duck クラスなどが存在する場合、この種の制約は避けられません。したがって、このメソッドはインターフェイスを介してより信頼性が高く、よりバインディングが高くなります

C# インターフェイス 簡単に言えば

私たちの会社には 2 種類のプログラマがいると仮定します: VB プログラマは VB でプログラムを書くプログラマを指します。 、 clsVBProgramer クラスで表されます。 Delphi プログラマは、 Delphi でプログラムを作成するプログラマを指し、 clsDelphiProgramer クラスで表されます。すべてのクラスには WriteCode() メソッドがあります。定義は次のとおりです: [csharp] view plain copy

class clsVBProgramer()  
{  
....  
WriteCode()  
{  
     //用VB语言写代码;  
}  
....  
}  
  
class clsDelphiProgramer()  
{  
....  
WriteCode()  
{  
    //用Delphi语言写代码;  
}  
   ....  
}

/*現在、会社にはプロジェクトがあり、プログラマにプログラムを作成する必要があります*/

class clsProject()  
{  
....  
WritePrograme(clsVBProgramer programer)//用VB写代码  
{  
    programer.WriteCode();  
}  
WritePrograme(clsDelphiProgramer programer)//重载方法,用Delphi写代码  
{  
    programer.WriteCode();  
}  
......  
}

メイン プログラムでは次のように記述できます:

main()  
{  
   clsProject proj=new clsProject;  
   //如果需要用VB写代码  
   clsVBProgramer programer1=new clsVBProgramer;  
   proj.WritePrograme(programer1);  
   //如果需要用Delphi写代码  
   clsDelphiProgramer programer2=new clsDelphiProgramer;  
   proj.WritePrograme(programer2);  
}

しかし、この時点で別の C# プログラマーが会社に来たら、C# でプログラムを書く機能を実現できるように、このプログラムをどのように変更すればよいでしょうか?新しいクラス clsCSharpProgramer を追加すると同時に、この clsProject クラスで WritePrograme (clsCSharpProgramer プログラマー) メソッドを再度オーバーロードする必要があります。今度はさらにトラブルです。 C プログラマー、C++ プログラマー、および Java プログラマーがいる場合はどうなるでしょうか。大きな問題!

しかし、代わりにインターフェイスを使用すると、まったく異なります:

最初にプログラマ インターフェイスを宣言します:

interface IProgramer()
{
WriteCode();
}

次に 2 つのクラスを宣言し、IProgramer インターフェイスを実装します:

class clsVBProgramer():IProgramer{....WriteCode(){     //用VB语言写代码;}....}
class clsDelphiProgramer():IProgramer{....WriteCode(){    //用Delphi语言写代码;}   ....}

clsProject クラスにいくつかの変更を加えます:


class clsProject(){....WritePrograme(IProgramer programer){    programer.WriteCode();//写代码}......}
main(){   clsProject proj=new clsProject;   IProgramer programer;   //如果需要用VB写代码   programer=new clsVBProgramer;   proj.WritePrograme(programer);   //如果需要用Delphi写代码   programer=new clsDelphiProgramer;   proj.WritePrograme(programer);   }

C#、C、C++、JAVA などのプログラマーが追加された場合は、それらに関連するクラスを追加するだけで済み、main() に少し変更を加えれば OK です。特に拡張性が優れています!


さらに、clsProject クラスをコンポーネントに封印すると、ユーザーが機能を拡張する必要がある場合、それを実現するために外部に小さな変更を加えるだけで済み、変更する必要がなくなると言えます。コンポーネントはすでに密閉されています。とても便利で強力ではないでしょうか!

以上がC#インターフェース例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。