抽象クラスについては先ほど触れましたが、その特徴はサブクラスが抽象変更メソッドを実装する必要があることです。仮想変更メソッドもあります。仮想変更メソッドのサブクラスは、書き換えることなく、または書き換えずに直接使用できます。ただし、C# も単一継承であるため、親クラスを定義してから継承して一部のクラスを拡張すると、不適切な状況が発生します。私たちプログラマは世界を記述するためにプログラミング言語を使用するため、プロジェクト内のクラス、名前クラス、メソッドの記述などを現実世界と同様に編成することが最善です。これにより、開発が楽になり、バグ修正が容易になります。
たとえば、プロジェクトでは多くのフォームが使用されます。一部のフォームは終了イベントを再処理する必要があり、一部のフォームはサイズ変更イベントを処理する必要があります。しかし、フォームを書くたびにイベントを閉じたり、イベントのサイズを変更したりするメソッドを書かなければならないのは、常に非常に面倒です。この時点で継承は使用できますか?
public class IControlAble1 { public event EventHandler OnCloseEvent;//关闭 public void Control_Close(object sender, EventArgs e) { if (OnCloseEvent != null) { OnCloseEvent(sender, e); } } } public class IControlAble2 { public event EventHandler OnSizeChangeEvent;//改变大小 public void Control_SizeChange(object sender, EventArgs e) { if (OnSizeChangeEvent != null) { OnSizeChangeEvent(sender, e); } } }
想像してみてください。フォーム クラスを作成するたびに、IControlAble1 または IControlAble2 を継承するのはいつも奇妙に感じます。これら 2 つのクラスはフォーム クラスではないからです。このとき実装できるものがあります、それがインターフェースです。
インターフェース、これは本に書いてあることですが、インターフェースは行動規範です。たとえば、USB2.0 インターフェイスについてはよく話されますが、USB ケーブルを製造するすべてのメーカーは USB2.0 ガイドラインに従っています。 . すべて ワイヤの接続ポイント、長さ、幅、高さ、および各データ ワイヤの配置方法は、このガイドラインに準拠する必要があります。このように、みんなが作ったセリフは普遍的に使えるのです。
プログラムの場合、異なるクラスが同じスーパークラスを持ち、それらはすべてスーパークラスの抽象メソッドを実装するようなものです。このように、すべてのクラスに何らかの基準があります。ただし、C# には単一継承があるため、実装が困難です。 C# にはインターフェイスという概念があります。インターフェイスの標準形式と特性を見てみましょう:
/// <summary> /// 1、接口不允许public,private,interna、protected修饰,因为所有的接口都是公用的; /// 2、成员不带代码体; /// 3、接口不能定义字段成员; /// 4、不能用关键字static,virtual,abstract、sealed修饰 /// 5、一个类可以实现多个接口 /// </summary> interface IMyInterfaceAble { //方法、字段 int MyValue { get; set; } void Method1(); void Method2(); }
C# でのインターフェイスの名前は、一般的に次のようになります: I***able (I はインターフェイスを意味し、接尾辞は Able)。したがって、インターフェイスは次の機能を備えていると見なすことができます。
これで上記の問題は解決できます。 2 つのクラスをインターフェイスに変更し、他のフォーム クラスに実装します。
interface IControlAble1 { //没有代码体,并且不修饰 event EventHandler OnCloseEvent;//关闭 void Control_Close(object sender, EventArgs e); } interface IControlAble2 { event EventHandler OnSizeChangeEvent; void Control_SizeChange(object sender, EventArgs e); } public class MainForm : IControlAble1,IControlAble2//可以实现多个接口 { /* 窗体代码 */ public event EventHandler OnCloseEvent; public void Control_Close(object sender, EventArgs e) { Console.WriteLine("重写关闭事件。"); } public event EventHandler OnSizeChangeEvent; public void Control_SizeChange(object sender, EventArgs e) { Console.WriteLine("重写大小改变事件。"); } } public class ChildForm1 : IControlAble1 { /* * 窗体代码 */ public event EventHandler OnCloseEvent; public void Control_Close(object sender, EventArgs e) { Console.WriteLine("重写关闭事件。"); } } public class ChildForm2 : IControlAble2 { /* 窗体代码 */ public event EventHandler OnSizeChangeEvent; public void Control_SizeChange(object sender, EventArgs e) { Console.WriteLine("重写大小改变事件。"); } }
このようにすると、コードを書くのがより便利になり、書き忘れがなくなります。
上記は C# の基礎知識をまとめたものです: 基礎知識 (8) インターフェイスの内容 さらに関連するコンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。