我有一个类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