如何创建执行操作的接口列表
本文关键字:操作 接口 列表 执行 何创建 创建 | 更新日期: 2023-09-27 18:04:03
我知道这个问题可以通过说foreach(var item in items){item.doSomething()};
来回答,但我所追求的略有不同。界面如下:
ManagableClass cs
public interface ManagableClass : System.IDisposable
{
void Initialize();
}
和下面是我希望看到的代码
的样子MainManagerClass.cs
public class MainManagerClass: ManagableClass
{
private List<ManagableClass> minions;
public void Initialize()
{
TellMinionsTo(Initialize);
}
public void Dispose()
{
TellMinionsTo(Dispose);
}
private void TellMinionsTo(Action doSomething)
{
foreach (ManagableClass minion in minions)
{
minion.doSomething();
}
}
}
我知道这个代码在这里不会工作,但似乎这个应该在c#中是可行的。有人知道这能不能做到吗?如果没有,也不是世界末日,我就在每个方法中做一个foreach
。
你的代码的问题是,你传递一个委托给一个特定实例(你自己)的方法,而你想要的是调用一个特定的方法在所有的从属。
你可以使用lambda表达式,比如
public void Dispose()
{
TellMinionsTo(minion=>minion.Dispose());
}
private void TellMinionsTo(Action<ManagableClass> doSomething)
{
foreach (ManagableClass minion in minions)
{
doSomething(minion);
}
}
我不喜欢直接使用List的方法。明天你将不得不通过接口工作,而你的illist可能根本就不需要是List了。
您正在寻找的是复合模式。此模式将允许您拥有一个实现正确方法的类,并将其与项列表区分开来。然而,在您的情况下,您需要修改您的接口来实现DoSomething()
方法。所以,它应该是这样的
public interface ISomething
{
void DoSomething();
}
public class SomethingManager : ISomething
{
private List<ISomething> _items = new List<ISomething>();
public void DoSomething()
{
_items.ForEach(i => i.DoSomething());
}
}