如何创建执行操作的接口列表

本文关键字:操作 接口 列表 执行 何创建 创建 | 更新日期: 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());
    }
}