簡體   English   中英

VS2005中的C#:在繼承的類中,您是否需要顯式調用超級構造函數?

[英]C# in VS2005: in an inherited class, do you need to explicitly call the super-constructor?

如果您使用C#(VS2005)繼承了一個類,是否需要顯式調用更高類的構造函數,還是會自動調用它?

如果未提供,則默認(無參數)構造函數將自動被調用。

換句話說,這些是等效的

public Foo() : base() {}

public Foo() {}

假設Foo的基具有無參數構造函數。

另一方面,如果基礎具有帶有如下參數的構造函數:

protected MyBase(IBar bar) {}

然后

public Foo() {}

不會編譯 在這種情況下,您必須使用適當的參數顯式調用基數-例如

public Foo(IBar bar) : base(bar) {}

如果基類具有將自動調用的默認構造函數。 如果沒有默認構造函數,則必須顯式調用一個構造函數。

如果不指定基類的默認構造函數,則將自動調用該基類的默認構造函數。

示例代碼:

public class ClassA
    {

        protected bool field = false;

        public ClassA()
        {
            field = true;
        }
    }

    public class ClassB : ClassA
    {
        public ClassB()
        {
        }

        public override string ToString()
        {
            return "Field is " + field.ToString();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ClassB target = new ClassB();

            Console.WriteLine(target.ToString());

            Console.ReadKey();
        }
    }

這將顯示“字段”值設置為true,即使ClassB沒有顯式調用ClassA構造函數。

暫無
暫無

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

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