簡體   English   中英

如何在c#中繼承時不隱藏基類成員

[英]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對象將有child1base1性質和方法,但新的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM