假設我們有3個類:Base
,Root
和Child
。成員的繼承和知名度
public abstract class Base
{
protected int _Value;
public double DoSomeWork(int value)
{
_Value = value;
double result = Calculate();
return result;
}
public abstract double Calculate();
public Child CreateChild(int length)
{
return new Child(this);
}
}
public class Root : Base
{
public override double Calculate()
{
return _Value;
}
}
public class Child : Base
{
readonly Base _Container;
public Child(Base container)
{
_Container = container;
}
public override double Calculate()
{
double result = _Container.Calculate();
// do some more calculation
return result;
}
}
我在這裏的問題是,我只喜歡DoSomeWork
(和CreateChild
)可以公開訪問,但在我的「架構」我被迫做出Calculate
公也。還是我?
任何輸入將非常感激。
編輯:
Calculate
不能使用,因爲這條線的Child
double result = _Container.Calculate();
這將導致發生生成錯誤保護。
由於您的代碼看起來不完整,因此您不完全清楚您要完成的操作。例如,'_Value'字段不在任何地方使用,以及'DoSomeWork'方法中的'value'參數。展示它們應該如何交互會有所幫助。現在'DoSomeWork'顯得多餘,'Calculate'似乎在做所有的工作(因此需要公開)。另一方面,可能會發現「Calculate」根本不屬於這個類,這是我從第一眼看到的。 – Groo 2012-01-13 12:19:15
@Groo _Value用於'Root'類。我已經編輯了「使用」'value'參數的問題。我同意這是最可能有錯的「架構」。一般的想法是,消費者應該實例化'Root'類,然後在使用'DoSomeWork'的同時用'CreateChild'生成子類。理想情況下,所有其他成員不應該是可見的。 (包括'Child' ctor) – clearpath 2012-01-13 12:31:37
我已經更新了我的答案。 – Groo 2012-01-13 12:53:12