如何在c#中继承时不隐藏基类成员

时间:2013-11-04 05:27:19

标签: c# inheritance

我没有在此代码中获取基类成员。请建议。我是这里的菜鸟

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();
        }
    }

2 个答案:

答案 0 :(得分:2)

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

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

作为副作用,child1对象可用于任何需要base1对象的语句,因为child1对象 a {{ 1}}对象。

答案 1 :(得分: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);
        }
    }