2012-02-14 70 views
0

我有一個類A擁有一個對象的集合。該類的每個實例都按照不同的邏輯填充集合。我不時需要更新所有的收藏。 我在想,如果這個類有一個方法來保存填充集合的邏輯,我可以這樣做,我可以在創建對象時設置這個邏輯。 像這樣:重新定義方法

MyClass instance = new MyClass(); 

instance.updateCollection = { logic for filling the collection } // 

邏輯對於每個對象都是不同的。

感謝

回答

2

您可以用Action輕鬆實現這一點。

要麼在構造函數中傳遞想要的Action,要麼創建一個屬性,允許您設置所需的Action

+0

感謝。我能夠以這種方式工作。 – Aaron 2012-02-14 19:34:42

1

聽起來像你應該使用像創建這些對象的工廠,但也存儲對它們的引用。然後,您可以在工廠內部有一個單獨的方法來更新工廠內的每個集合。

此外 - 不要束縛自己一個類。如果你擁抱多態性和繼承的想法而不是與之對抗,你會發現C#更容易,更有趣。

1

下面是使用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(); 
    } 
}