我有一個基類和從該基類派生的幾個子類。我也有基類中的靜態函數,它需要一些參數,並基於輸入參數(我的工廠方法)實例化並返回一個適當的子類。c#工廠方法和保護級別問題
現在,我的問題是:我只想允許實例化子類從工廠方法。但是,如果我設置要保護的子類的構造函數,基類將無法看到它們。是否有我缺少的訪問修飾符允許基類調用子類的構造函數,但不允許任何其他類調用它們?
內部看起來不會有效......我想限制只有基類的子類構造函數的訪問權限,在同一個程序集中還有其他類應該能夠訪問基本工廠方法但不能直接實例化任何子類。
希望有很簡單的東西,我失蹤...
例子:
public class Base
{
public Base CreateChild(string childType)
{
if(childType == "A")
return new ChildA();
if(childType == "B")
return new ChildB();
return null;
}
}
public class ChildA
{
protected ChildA() // This doesn't work, since now base class can't call this!
{
}
}
public class ChildB
{
protected ChildB()
{
}
}
此外,您可以使Base和ChildA/B部分化,並且只需在Base中聲明Child,然後讓另一個Partial Base和Child聲明所有代碼,以使它們保持獨立。 – max
謝謝,這對我很好。希望我可以給你和zsalzbank信貸,因爲你們都給出了同樣的答案,並沒有告訴我只是做一些完全不同的事情,比如大多數時候我會去一個論壇尋求幫助。;) – SomeGuy