2012-02-14 65 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(); 
    } 
}