[英]How to not hide base class members while inheriting in c#
我沒有在此代碼中獲得基類成員。 請建議。 我是這里的菜鳥
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();
}
}
在C#繼承中,你所擁有的“子”類實際上不是一個孩子(由基礎擁有),而是一個更具體的基礎版本(就像足球是一種特定的球類)。 基類和繼承的類是相同的實際對象。 因此, new
關鍵字不合適,因為您想要的是基類的名稱,而不是新的基礎對象。 通過在基類和繼承類中對屬性使用相同的名稱,您將屬性“隱藏”在基礎中,因為單個對象不能具有兩次相同的屬性(在您的示例中,您的對象不能有兩個不同的name
。如果你想要做的是讓繼承的類知道基類的名稱,它們需要是不同的屬性。
想起來了,最好的辦法是,如果你使用new
創建一個對象,該對象將有自己的每個屬性和方法,並在分類上面任何類,所以child1
對象將有child1
和base1
性質和方法,但新的base1
對象只有base1
屬性和方法。
作為副作用,一個child1
對象可以在需要的任何語句中使用base1
對象,由於child1
對象是 base1
對象。
在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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.