簡體   English   中英

基類中的派生實例

[英]derived instance in base class

class baseClass
{
    derivedClass nm = new derivedClass();
}

class derivedClass : baseClass
{
}

這段代碼很好。 C#允許在baseClass創建derivedClass對象的可能原因是什么。 你能想到這樣做的具體原因嗎?

這段代碼很好。

是的 - 為什么你認為不會?

C#允許在baseClass中創建derivedClass對象的可能原因是什么。

因為沒有理由禁止它嗎?

你能想到這樣做的具體原因嗎?

例如,靜態工廠方法?

// BaseClass gets to decide which concrete class to return
public static BaseClass GetInstance()
{
    return new DerivedClass();
}

這實際上是一種非常常見的模式。 我們在Noda Time中使用它很多,例如CalendarSystem是一個公共抽象類,但所有具體的派生類都是內部的。

當然,擁有你給出的確切示例是很瘋狂的 - 實例字段通過創建派生類的實例來初始化自己 - 因為它會因遞歸而炸毀堆棧 - 但這不是它是派生的問題類。 你可以通過初始化同一個類來獲得相同的東西:

class Bang
{
    // Recursively call constructor until the stack overflows.
    Bang bang = new Bang();
}

我以前使用的開發人員在我們的代碼庫中生成了這段代碼。 我個人認為它很有用。

public class Foo
{
    public static Foo MagicalFooValue
    {
        get { return Bar.Instance; }
    }

    private class Bar : Foo
    {
        //Implemented as a private singleton
    }
}

一個明顯的例子是在基類中有一個工廠方法,根據某些條件返回適當的實現。

derivedClass可以在baseClass中實例化,因為它是一個可訪問的類。 c#沒有理由限制你這樣做。 同樣,您可以在baseClass創建一個baseClass實例。

暫無
暫無

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

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