C# クラスの継承を簡単に紹介するサンプル コード

黄舟
リリース: 2017-03-28 11:21:30
オリジナル
1323 人が閲覧しました

この記事では主にC#クラスの継承関連の知識を紹介します。非常に優れた参照値があります。以下のエディターで見てみましょう

継承

クラスは別のクラスから継承できます。 C# では、クラス間の継承は 1 つだけです。つまり、クラスは直接の基本クラスを 1 つだけ持つことができます。クラス間で継承が実装されている場合、サブクラスは、クラスの staticコンストラクター、インスタンス コンストラクター、および デストラクター

を除く、直接の基本クラスのすべてのメンバーを独自のメンバーとして扱うことができます。ただし、基本クラスのすべてのメンバーをサブクラスのメンバーとして使用できますが、基本クラスのメンバーのアクセス権限が異なる場合、派生クラスがアクセスできるメンバーも異なります。 C# の継承は推移的です。クラス C がクラス B から派生し、クラス B がクラス A から派生した場合、クラス C はクラス B のすべてのメンバーを継承し、クラス A のすべてのメンバー (各基本クラスの静的コンストラクター、インスタンス構築メソッドとデストラクタ メソッドを除く)。サブクラス (派生クラス) は、継承に基づいて独自のメンバーを追加できますが、親クラス (基本クラス) の継承されたメンバーを削除することはできません。デストラクター メソッドの機能は、クラスのインスタンスを破棄することです。その説明は次の記事でまとめます。

以下のコード例を見てください:

using System;
namespace LycheeTest {
  public class TV {
    private int channel = 1; //电视机的频道
    private int volume = 20; //电视机的音量
    public static string model = "39 英寸液晶"; //型号
    /// <summary>
    /// 具体设置电视机的频道和音量,因为只提供给子类使用  /// 所以用 protected 访问权限关键字修饰
    /// </summary>
    /// <param name="ch">具体设置的频道数</param>/// <param name="vol">具体设置的音量值</param>
    protected void Set(int ch, int vol) {
      channel = ch;
      volume = vol;
      Console.WriteLine("设置完毕");
    }
    /// <summary>
    /// 增加频道
    /// </summary>
    public void ChPlus() {
      channel++;
    }
    /// <summary>
    /// 增加音量
    /// </summary>
    public void VolPlus() {
      volume++;
    }
    /// <summary>
    /// 将信息显示在电视机屏幕上
    /// </summary>
    public void Show() {
      Console.WriteLine("电视机型号是:{0}", model);
      Console.WriteLine("频道:{0}", channel);
      Console.WriteLine("音量:{0}", volume);
    }
  }
  public class NewTV: TV {
    public void PlayUDisk() {
      this.Set(0, 30);
      this.Show();
      Console.WriteLine("现在开始播放 U 盘的视频文件......");
    }
  }
  class Program {
    static void Main(string[] args) {
      NewTV myNewTV = new NewTV();
      myNewTV.ChPlus();
      myNewTV.VolPlus();
      myNewTV.Show();
      myNewTV.PlayUDisk();
      Console.ReadKey();
    }
  }
}
ログイン後にコピー
上記のコードでは、コードの 3 行目で基本クラス TV が定義されています。その静的フィールドとインスタンス フィールドには、フィールドを初期化するためのイニシャライザがあります。 11 行目では、アクセス修飾子が保護されたインスタンス メソッドを追加します。この修飾子を使用すると、このクラスの定義内およびその派生クラス内でのみアクセスできます。なぜこのアクセス修飾子を使用するのでしょうか?このメソッドはクラスの外部で使用するためのものではないためです。つまり、ユーザーに公開する必要はありません。ただし、継承されたクラスはそれを使用する必要があるため、このアクセス許可キーワードを使用すると、継承されたクラスに対してのみ公開される、ある程度の公開、つまり直接的な公開が保証されます。このメソッドの目的は、インスタンス フィールドの値を具体的に設定することです。 USB フラッシュ ドライブのコンテンツをシミュレートするときに、インスタンス フィールドに TV のチャンネルと音量の特定の値を設定します。これとは別に、基本クラスの other

メソッドは変更されていません。コードの 37 行目は、派生クラスとも呼ばれるサブクラスを定義します。基本クラスから継承するための構文は、クラス名の後にコロンを追加し、その後に基本クラスのクラス名を追加します。コードの 38 行目では、基本クラスの Set メソッドが呼び出され、2 つのパラメータが USB フラッシュ ドライブのコンテンツを再生する際の TV を決定するメソッドを定義しています。チャンネルは0、音量は30です。 Set メソッドを呼び出すときは、 this キーワードが使用されることに注意してください。これは、このメソッドが基本クラスから継承され、独自のプロパティと同等であるため、このメソッドがインスタンス独自のものであることを示します。 次に、基本クラスの Show メソッドが呼び出され、チャンネルと音量の設定が再度表示されます。したがって、TV ライクと NewTV ライクの関係は次のように説明できます。TV ライクは TV セットのプロトタイプと見なすことができ、NewTV ライクはこのプロトタイプに基づいてアップグレードされた TV セットと見なすことができます。 USB ディスク再生機能が追加されており、その他の機能は再設計することなくプロトタイプから直接継承できます。コードの 46 行目でサブクラスのインスタンスを定義し、次に 47、48、および 49 行目で基本クラスに定義されたインスタンス メソッドを直接呼び出します。これらのメソッドは継承されており、完全にサブクラス自体に属しているためです。 50 行目では、サブクラスによって定義された新しく追加されたメソッドを呼び出します。このコードの実行結果は次のようになります:

电视机型号是:39 英寸液晶 
频道:2
音量:21 设置完毕
电视机型号是:39 英寸液晶
频道:0 音量:30
现在开始播放 U 盘的视频文件......
ログイン後にコピー

以上がC# クラスの継承を簡単に紹介するサンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
c#
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート