ホームページ  >  記事  >  バックエンド開発  >  C#基礎知識編:基礎知識(3)クラス構造

C#基礎知識編:基礎知識(3)クラス構造

黄舟
黄舟オリジナル
2017-02-10 15:38:451216ブラウズ

オブジェクトをインスタンス化するときに、YSchool クラスと YTeacher クラスを定義しました。

            YSchool shool1 = new YSchool();

            shool1.ID = 1;

            shool1.Name = "清华附中";

            YSchool school2 = new YSchool();

            school2.ID = 2;

            school2.Name = "北师大附中";

これは、論理的に間違っています。なぜなら、オブジェクトがインスタンス化されるときに、そのプロパティがインスタンス化に含まれる必要があるからです。後で属性を追加するよりも簡単です。プログラムのパフォーマンスでは、属性には初期値が必要です。
したがって、戻り値の型がなく、メソッド名がクラス名と同じで、パラメーター クラス リストが存在するか、パラメーター リストが存在しない、そのようなメソッドがクラス内に存在する必要があります。一般に「コンストラクター」または「コンストラクター」として知られる構築方法です。もちろん、クラスには 1 つ以上のコンストラクターを含めることができますが、これはクラスにデフォルトのコンストラクターが存在しないという意味ではありません。複数のコンストラクターを使用する場合、それぞれのパラメーター リストは異なる必要があります。
以下では、このクラスを完了するための例として YSchool を使用します。

  /// <summary>
    /// YSchool类的id和name是它的固有属性,它的值应该是确定的。
    /// 实例化的同时对属性赋初值,用到构造函数。
    /// </summary>
    public class YSchool
    {
        private int id = 0;

        private string name = string.Empty;

        public int ID
        {
            get
            {
                return this.id;
            }
        }

        public string Name
        {
            get
            {
                return name;
            }
        }
        /// <summary>
        /// 没有参数的构造器称之为“默认构造器”;如果没有写一个构造器,那么
        ///系统也会提供一个默认的构造器,所以说类至少有一个构造器;
        ///当然,如果系统提供的默认构造函数,则属性初值为声明时赋的初值,如果声明
        ///未赋初值,则是“类型默认值”,比如0或者null。
        /// </summary>
        public YSchool()
        {
            this.id = 0;

            this.name = @"清华附中";
        }
        /// <summary>
        /// 带有参数列表的构造函数,
        /// 属性的值就是传入的列表的值。
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        public  YSchool(int id, string name)
        {
            this.id = id;

            this.name = name;
        }
        public  YSchool(int id)
        {
            this.id = id;

            this.name = @"陕科大附中";
        }
    }
   class Program
    {
        static void Main(string[] args)
        {
            YSchool shool1 = new YSchool();

            YSchool school2 = new YSchool(1, @"西工大附中");

            YSchool school3 = new YSchool(2);

            Console.ReadKey();
        }
    }

id と name の get/set 属性も get のみに変更されました。これらの属性値は固有の属性であるため、インスタンス化後に値を割り当てるのは論理的ではありません。つまり、これらのプロパティは読み取り専用です。

デフォルト値はコードに記載されています。ここで簡単に説明しましょう。フィールドを宣言する場合、代入演算子「=」を使用してフィールドに値を直接追加できます。たとえば、

    string name = string.Empty;

デフォルト値は単なる形式です。変数の値がまだコンストラクター内にあります。一般に、標準コードでは、変数を宣言するときに変数に初期値を割り当てる必要があります。有効期間中に割り当てられたフィールドがない場合、コンパイラはフィールドを設定されたデフォルト値に割り当てる割り当てコードを追加します。実際、フィールドにデフォルト値を追加するかどうかに関係なく、フィールドにはデフォルト値がありますが、デフォルト値を人為的に追加しない場合、フィールドのデフォルト値は 0 または null になります。
ここでもう 1 つ注意すべき点は、システムのデフォルト コンストラクターについては前述しましたが、コンストラクターが定義された時点では、システムのデフォルト コンストラクターは存在しないということです。したがって、場合によっては、デフォルト コンストラクターとパラメーター付きコンストラクターの両方が使用される場合は、デフォルト コンストラクターを手動で定義する必要があります。たとえば、

        public YSchool()
        {

        }

または

        public YSchool()
        {
            this.id = 0;

            this.name = @"尚进";
        }

要約すると、クラスをインスタンス化するための標準的な式は次のようになります: クラス名 インスタンス名 = 新しいクラス名 (コンストラクター パラメーター リスト);

上記は、C# の基本的な知識を整理したものです。基礎知識 ( 3) クラス構造の内容については、PHP 中国語 Web サイト (www.php.cn) を参照してください。

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