簡體   English   中英

c#如何通過派生類對象單獨調用基類構造函數?

[英]How to call base class constructor alone through derived class object in c#?

我在一次采訪中得到了以下問題:“如何從派生類對象單獨調用基類構造函數(默認構造函數)”。 該對象不應調用派生類的默認構造函數。 這怎么可能?

這是代碼:

class a
{
    public a()
    {
        MessageBox.Show("Base class called");
    }    
}
class b : a 
{
    public b()
    {
        MessageBox.Show("Derived class");
    }
}

我只想顯示基類構造函數,而沒有調用派生類的構造函數。 我怎樣才能做到這一點?

問題的措辭方式聽起來像一個謎語,但我認為它的意思是“如何從派生類的非默認構造函數調用基類默認構造函數”。

無論如何,這將隱式發生,但如果您想顯式,您正在尋找base關鍵字來指定在基類中調用哪個構造函數:

public Derived(object param) : base()
{

}

不調用派生類的默認構造函數的唯一方法是在派生類中有一個非默認構造函數並使用它實例化對象。

有關包含默認和非默認構造函數的演示,請參閱此小提琴

假設您有以下課程:

class Base 
{
    public Base() { }
}    

class Derived : Base
{
    public Derived() { }   
}

創建派生類時會自動調用base類的構造函數。 因此,根本不可能在不調用派生類的情況下調用基類構造函數。 唯一的方法是創建一個Base類型的實例而不是Derived ,如果你創建一個Derived它的構造函數肯定會被調用。

但是,如果您在Derived有第二個構造函數直接調用Base -one,您當然可以繞過派生類的默認構造函數:

class Derived : Base
{
    public Derived() { }   
    public Derived(params object[] args) : base() { }   
}

現在您可以進行以下調用:

Derived d = new Derived(); // will call both default-constructors
Derived d1 = new Derived(null); // calls the params-overloaded constructor and not its default one

試試這個代碼::

class Base 
{
    public Base() {
        Console.WriteLine("BaseClass Const.");
    }
}    

class Derived : Base
{
    public Derived() { }   
    public Derived(params object[] args) : base() { } 
}

    public class Program
    {
        public static void Main(string[] args)
        {

            Derived d = new Derived(null) ;

        }
    }

預期輸出:

BaseClass Const.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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