我没有在此代码中获取基类成员。请建议。我是这里的菜鸟
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();
}
}
答案 0 :(得分:2)
在C#继承中,你所拥有的“子”类实际上不是一个孩子(由基础拥有),而是一个更具体的基础版本(就像足球是一种特定的球类)。基类和继承的类是相同的实际对象。因此,new
关键字不合适,因为您想要的是基类的名称,而不是新的基础对象。通过在基类和继承类中对属性使用相同的名称,您将属性“隐藏”在基础中,因为单个对象不能具有两次相同的属性(在您的示例中,您的对象不能有2个不同的name
。如果你想要做的是让继承的类知道基类的名称,它们需要是不同的属性。
考虑它的最好方法是,如果你使用new
创建一个对象,那么该对象将拥有自身的所有属性和方法以及类中的任何类 树,因此child1
对象将具有child1
和base1
属性和方法,但新的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);
}
}