0

このコードで基本クラスのメンバーを取得していません。提案してください。私は新人です

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CaseStudy1
{  
    class base1
    {
        protected string name = "";
        public base1() {}
        public base1(string dad)
        {
            this.name = dad;
        }
    }

    class child1 : base1
    {
        private string name = "";

        public child1()
        {
            this.name = base.name;
        }

        public void show()
        {
            base1 b1 = new base1("Daddy");
            Console.WriteLine("base name"+base.name);
            Console.WriteLine("child's name" + name);            
        }

        public static void Main(string[] args)
        {
            child1 c1 = new child1();
            c1.show();
            Console.ReadLine();
        }
    }
4

2 に答える 2

2

C# 継承では、「子」クラスとして持っているものは、実際には (ベースによって所有されている) 子ではなく、ベースのより具体的なバージョンです (フットボールが特定の種類のボールであるようなものです)。基本クラスと継承クラスは同じ実体です。したがって、new必要なのは基本クラスの名前であり、新しい基本オブジェクトをすべてまとめたものではないため、キーワードは適切ではありません。基本クラスと継承されたクラスの両方でプロパティに同じ名前を使用することにより、単一のオブジェクトが同じプロパティを 2 回持つことができないため、基本のプロパティを「非表示」にします (この例では、オブジェクトはできません)。nameあなたがしたいことが、継承されたクラスにベースの名前を知ってもらうことである場合、それらは異なるプロパティである必要があります 。

を使用newしてオブジェクトを作成する場合、そのオブジェクトにはそれ自体のすべてのプロパティとメソッド、およびクラス ツリーでそのchild1にあるすべてのクラスが含まれるため、オブジェクトにはchild1base1プロパティとメソッドが含まれますが、新しいbase1オブジェクトにはbase1プロパティとメソッドしかありません。

オブジェクトオブジェクトであるため、副作用として、オブジェクトをchild1必要とするステートメントでオブジェクトを使用できます。base1child1base1

于 2013-11-04T05:37:48.990 に答える
0

ここで Show メソッド内で、base1 クラスの新しいインスタンスを作成しbase.nameます。したがって、b1 は新しいインスタンスであるため、使用して設定された値から読み取ることはできません。

次のように使用できます。

    class base1
    {
        protected string name { get; set; }
        public base1() { }
    }
    class child1 : base1
    {
        private string name = "";
        public void show()
        {
            base.name = "Daddy";
            this.name = base.name;
            Console.WriteLine("base name" + base.name);
            Console.WriteLine("child's name" + name);
        }
    }
于 2013-11-04T05:33:10.727 に答える