切り取りが乱れている--C#リロード/書き換え/上書き

3355 ワード

実際のプログラミングではクラス,メソッド,関数など同名のものが多く,プログラムの可読性が悪いという問題がある.このような問題を回避するために、C#は、ネーミングスペース、クラス名、リロード、上書きなど、同名の関数またはメソッドを区別または変更する多くのメカニズムを提供します.このブログでは、リロードとオーバーライドを比較し、例を通じて記憶を強化します.
一、重荷
1、重荷指示
リロード(Overload)とは、リロードという意味で、同じクラスの同名を指しますが、パラメータリストの異なるメソッドグループ(関数がリロードされているかどうかは戻り値で区別できません)、リロードにはキーワードがありません.一般的には、リロードとは、メモリ内の同じクラスの関数やメソッドを再ロードすることを意味します.
2、発生条件
1つのクラスで発生する必要があります.関数名は同じで、パラメータタイプまたは順序が異なると、戻りタイプに関係なくリロードされます.
次のようになります.
Public class Name
{
	Public string GetName(string username)
	{
		Return username;
	}
Public int GetName(int usercount)
	{
		Return usercount;
	}
}

二、書き直す
1、指示
書き換え(Override)とは、サブクラスが親クラスの関数の関数体を変更することを意味し、書き換える必要がある親クラスの関数はvirtual、abstract、overrideで表記されている必要があり、虚でない方法や静的な方法を書き換えることはできません.
Overrideは継承するときに、継承する関数の特徴(関数の特徴には関数名、パラメータのタイプ、個数が含まれている)と同じ関数を書くと、このキーワードを加えると、このサブクラスのこの関数を使用するときに親(またはスーパークラス)の関数が見えなくなり、上書きされます.
2、発生条件
ベースクラスと派生クラスで発生する必要があります.ベースクラス関数はvirtual、abstractまたはoverrideで修飾し、派生クラスはoverrideで修飾します.
次のようになります.
    class Program
    {
        static void Main(string[] args)
        {
            oc oa=new ob();
            oa.b(1, 2);   //     fdfdf
        }
        public class oc
        {
            private int a;
	      //  
            public int geta
            {
                get { return a; }
            }
            public int seta
            {
                set { a = value; }
            }
	     //  b
            public virtual int b(int c, int e)
            {
                Console.WriteLine("{0}+{1}={2}", c, e, c + e);
                return c + e;
            }
        }
        //   ob,  oc
        public class ob : oc
        {
	    //        b
            public override int b(int c,int e)
            {
                Console.WriteLine("fdfdf");
                return c;
            } 
        }
}

三、カバー
1、指示
オーバーライドとは、子クラスの親クラスと同じ関数フィーチャーを持つ関数体を再定義します.サブクラスには、親クラスの関数と同じ関数の特徴がありますが、関数体が異なり、上書きと呼ばれます.この上書きは非表示とも呼ばれ、親クラスで同じ関数を非表示にし、書き換えは行われません.
2、発生条件
サブクラスにベースクラスと同じ名前(パラメータが異なる場合も計算)の非虚関数を書くと、ベースクラスの関数が非表示になり、コンパイル後にNewキーワードの使用を求めるプロンプトが表示されます.
次のようになります.
    class Program
    {
        static void Main(string[] args)
        {
            oc oa=new ob();
            oa.b(1, 2);  //     1+2=3
        }
        public class oc
        {
            private int a;
	     //  
            public int geta
            {
                get { return a; }
            }
            public int seta
            {
                set { a = value; }
            }
	    //  b
            public int b(int c, int e)
            {
                Console.WriteLine("{0}+{1}={2}", c, e, c + e);
                return c + e;
            }
        }
	//   ob,  oc
        public class ob : oc
        {
	     //  ,        b
            public new int b(int c,int e)
            {
                Console.WriteLine("fdfdf");
                return c;
            } 
        }
}

四、まとめ
書き換え(Override)の2つの関数の関数の特徴は同じで、サブクラスと親クラスに適用すると、親関数が書き換えられます.リロード(Overload)の2つの関数の関数名は同じですが、関数の特徴が異なり、同じクラスに適用されます.上書き(new)の2つの関数の関数名は必ず同じですが、関数の特徴は同じでも異なってもよく、サブクラスと親クラスに適用すると、親の同名関数が非表示になります.
これら3つの使用には注意すべき点がたくさんありますので、アプリの中で少しずつ蓄積していきましょう.分からないところや間違っているところがあれば、メッセージを残して交流してくださいね.