ホームページ >バックエンド開発 >C#.Net チュートリアル >C#の基礎知識編:C#のクラスと構造体(2)

C#の基礎知識編:C#のクラスと構造体(2)

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

1.コンストラクターとは何ですか? どのようなコンストラクターがありますか? 各コンストラクターの定義や実装方法、注意点は何ですか?
いわゆるコンストラクターはメソッドです。このメソッドはオブジェクトを初期化できます。つまり、この関数の実行後、メモリは常にこのクラスのオブジェクト用のスペースを開きます。通常のコンストラクター、つまりインスタンス化コンストラクターと、プライベート コンストラクターの 3 つのタイプがあります。
インスタンス化コンストラクター:

    public class Example
    {
        private string property1 = string.Empty;

        private string property2 = @"hello";

        private int property3 = 0;

        public Example()//成员都是声明时的初始值,这种默认的构造器,也可以不写。
        {

        }

        public Example(string p1, string p2, int p3)//传入的值初始化
        {
            this.property1 = p1;

            this.property2 = p2;

            this.property3 = p3;
        }
    }

プライベート コンストラクター:
プライベート コンストラクター。外部からアクセスできないため、インスタンス化する方法についてはシングルトン モードを参照してください。プライベート コンストラクターはここで使用されます:

http://www .php。 cn/

静的コンストラクター:
最初に例を見てください:

 public class StaticConstruct
    {
        static StaticConstruct()
        {
            Console.WriteLine(@"静态构造函数");
        }

        public StaticConstruct()
        {
            Console.WriteLine(@"实例化构造函数");
        }

        public StaticConstruct(string flage)
        {
            Console.WriteLine(@"带参构造函数");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            StaticConstruct strc = new StaticConstruct();

            StaticConstruct strcValue = new StaticConstruct(string.Empty);

            Console.ReadLine();
        }
    }

結果:

静的コンストラクターの特徴: インスタンス化の際、静的コンストラクターではアクセス修飾子は許可されません。静的コンストラクターは最初に関数として自動的に呼び出されます。静的コンストラクターの呼び出しは制御できません。静的コンストラクターにはパラメーターがなく、クラス内に継承できないのは 1 つだけです。
2. This キーワードと Base キーワードの用途は何ですか? コードを実装しますか?
(1)、このキーワード:
これは、名前が示すように、このクラスの意味を指し、現在のクラスのメンバーを指します。もちろん、プログラムが実行されている場合、これは現在のクラスのオブジェクトのメンバーを指しており、その機能はオブジェクトを区別することであると正確に言えます。クラスには N 個のオブジェクトを含めることができるためです。ただし、静的クラスでは this キーワードを使用できません。その理由は、静的クラスでは複数のオブジェクトをインスタンス化することができないためです。当然、オブジェクトを区別するためにこれを使用する必要はありません。一般に使用されるのは次のとおりです:
a. メソッドまたはコンストラクター内で同じ名前の変数。

     public class MyTestA
    {
        private string testA = string.Empty;

        public MyTestA(string testA)
        {
            this.testA = testA;
        }

        public void Handler(string testA)
        {
            this.testA = testA;
        }
    }

b. メソッドを取得および設定します

    public class MyTestB
    {
        private string testB = string.Empty;

        public string TestB
        {
            get 
            { 
                return this.testB;
            }
            set 
            { 
                this.testB = value;
            }
        }
    }

c. インスタンスを渡します
たとえば、イベント

    public class MyTestC
    {
        public event EventHandler OnTestCEvent = null;

        private void Send_OntestEvent(object sender,EventArgs e)
        {
            if (OnTestCEvent != null)
            {
                OnTestCEvent(sender, e);
            }
        }

        private void TestEvent()
        {
            Send_OntestEvent(this, null);
        }
    }

    public class MyTestD
    {
        MyTestC testC = new MyTestC();

        public event EventHandler OnTestDEvent = null;

        private void Send_OnTestDEvent(object sender, EventArgs e)
        {
            if (OnTestDEvent != null)
            {
                OnTestDEvent(sender, e);
            }
        }

        public MyTestD()
        {
            testC.OnTestCEvent += new EventHandler(testC_OnTestEvent);
        }

        void testC_OnTestEvent(object sender, EventArgs e)
        {
            Send_OnTestDEvent(sender, e);
        }
    }

    public class MyTestE
    {
        MyTestD testD = new MyTestD();

        public MyTestE()
        {
            this.testD.OnTestDEvent += new EventHandler(testD_OnTestDEvent);
        }

        void testD_OnTestDEvent(object sender, EventArgs e)
        {
            MyTestC testC = sender as MyTestC;//通过MytestD将对象转了过来

            if (testC != null)
            {
                //代码
            }
        }
    }

では (2) 基本キーワード:
通常、サブクラスが親クラスにアクセスするために使用されます。
1つは、親クラスのメソッドをオーバーライドするとき、

    public class ParentClass
    {
        public virtual void MethodA()
        {
            Console.WriteLine(@"基类的方法");
        }
    }

    public class ChildClass : ParentClass
    {
        public override void MethodA()
        {
            base.MethodA();

            Console.WriteLine("派生类方法");
        }
    }

もう1つは、サブクラスが親クラスのコンストラクターを呼び出すとき、

    public class ParentClass
    {
        public ParentClass(string flage)
        {
            Console.WriteLine(@"基类构造函数");
        }

        public virtual void MethodA()
        {
            Console.WriteLine(@"基类的方法");
        }
    }

    public class ChildClass : ParentClass
    {
        public ChildClass(string flage)

            : base(flage)
        {

        }

        public override void MethodA()
        {
            base.MethodA();

            Console.WriteLine("派生类方法");
        }
    }

3. リフレクションとは何ですか? リフレクションを実装するにはどうすればよいですか? リフレクションのメリットとデメリットは何ですか? リフレクションをいつ使用するか?
http://blog.csdn.net/yysyangyangyangshan/article/details/7028589

上記はC#の基礎知識:C#のクラスと構造体(2)の内容です。 PHP Chinese Net (www.php.cn) にご注意ください。

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