我有一個類A擁有一個對象的集合。該類的每個實例都按照不同的邏輯填充集合。我不時需要更新所有的收藏。 我在想,如果這個類有一個方法來保存填充集合的邏輯,我可以這樣做,我可以在創建對象時設置這個邏輯。 像這樣:重新定義方法
MyClass instance = new MyClass();
instance.updateCollection = { logic for filling the collection } //
邏輯對於每個對象都是不同的。
感謝
我有一個類A擁有一個對象的集合。該類的每個實例都按照不同的邏輯填充集合。我不時需要更新所有的收藏。 我在想,如果這個類有一個方法來保存填充集合的邏輯,我可以這樣做,我可以在創建對象時設置這個邏輯。 像這樣:重新定義方法
MyClass instance = new MyClass();
instance.updateCollection = { logic for filling the collection } //
邏輯對於每個對象都是不同的。
感謝
您可以用Action輕鬆實現這一點。
要麼在構造函數中傳遞想要的Action
,要麼創建一個屬性,允許您設置所需的Action
。
聽起來像你應該使用像創建這些對象的工廠,但也存儲對它們的引用。然後,您可以在工廠內部有一個單獨的方法來更新工廠內的每個集合。
此外 - 不要束縛自己一個類。如果你擁抱多態性和繼承的想法而不是與之對抗,你會發現C#更容易,更有趣。
下面是使用Action類的例子:
class MyClass
{
private readonly Action<List<string>> _updateAction;
private readonly List<string> _collection = new List<string>();
public MyClass(Action<List<string>> updateAction)
{
_updateAction = updateAction;
}
public void Update()
{
_updateAction(_collection);
}
}
class MyClassTester
{
public static void Test()
{
MyClass weekdayAdder = new MyClass(c => c.Add(DateTime.Now.DayOfWeek.ToString()));
MyClass timeAdder = new MyClass((c) => c.Add(DateTime.Now.ToShortTimeString()));
weekdayAdder.Update();
weekdayAdder.Update();
timeAdder.Update();
timeAdder.Update();
timeAdder.Update();
}
}
感謝。我能夠以這種方式工作。 – Aaron 2012-02-14 19:34:42