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# Inheritance 中,作为“子”类所拥有的并不是真正的子类(由基础拥有),而是基础的更具体版本(就像足球是一种特定类型的球)。基类和继承类是同一个实际对象。因此,new关键字不合适,因为您想要的是基类的名称,而不是一个新的基对象。通过对基类和继承类中的属性使用相同的名称,您将“隐藏”基类中的属性,因为单个对象不能两次具有相同的属性(在您的示例中,您的对象不能有 2 个不同name。如果你想做的是让继承的类知道基类的名称,它们需要是不同的属性。

最好的想法是,如果你用它new来创建一个对象,那么该对象将拥有它自己的所有属性和方法以及类树中它上面的任何类,因此一个child1对象将具有child1base1属性和方法,但是一个新base1对象只有base1属性和方法。

作为副作用,child1对象可以在任何需要对象的语句中使用,base1因为child1对象就是base1对象。

于 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 回答