ホームページ バックエンド開発 C#.Net チュートリアル C#基礎知識編:基礎知識(8)インターフェース

C#基礎知識編:基礎知識(8)インターフェース

Feb 11, 2017 pm 01:18 PM

抽象クラスについては先ほど触れましたが、その特徴はサブクラスが抽象変更メソッドを実装する必要があることです。仮想変更メソッドもあります。仮想変更メソッドのサブクラスは、書き換えることなく、または書き換えずに直接使用できます。ただし、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) に注目してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

See all articles