[英]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.