如何使用参数数量未知的Action

时间:2013-01-24 15:20:07

标签: c# parameters delegates action parameter-passing

您好我想做的事情:

public class Subscription
{    
    private Action _action;        //????

    public Subscription( Action a )//????
    {
        _action = a;               //????
    }
}


public class testklass
{        
     public testklass()
     {
         new Subscription(a); // just to show you how i want to submit
         new Subscription(b);
         new Subscription(c);
     } 

     private void a() { }
     private void b(string gg){}
     private void c(int i, string g) { } 
}

有办法做到这一点吗? 它会花费很多性能吗?

非常感谢任何建议

编辑:

我要打一个调解员

testklass只是创建Subscription对象并将其移交给Mediator的订阅者 当其他类发布与订阅匹配的Object / s时,谁做了所有这些的逻辑

但目前只想了解如何在我的容器对象Action中存储参数数量未知的Subscription

3 个答案:

答案 0 :(得分:3)

public class Subscription<T>
    {
        private T _action;       

        public Subscription(T a)
        {
            _action = a;        
        }
    }

你可以像使用它一样使用它;

Action<int> func1 = (q) => q += 1;
Action<int,int> func2 = (q,w) => q += w;
Subscription<Action<int>> s1 = new Subscription<Action<int>>(func1);
Subscription<Action<int,int>> s2 = new Subscription<Action<int,int>>(func2);

作为旁注,我不知道你想做什么,但可能有更好的方法。

答案 1 :(得分:0)

 public class testklass
    {
        public testklass()
        {
            new Subscription(a); // just to show you how i want to submit
            new Subscription(() => b("someparam"));
            new Subscription(()=>c(10, "someparam"));
        }

        private void a() { }
        private void b(string gg) { }
        private void c(int i, string g) { }
    }

答案 2 :(得分:0)

你可以使你的函数在以下语法中获得各种参数的决定性计数

  

resultType functionName(params object [] list){...}

然后将该函数与任何您想要的参数计数一起使用。

您还可以实现函数参数,如数组或列表或对象。那么你的函数只需要一个参数 - 存储你的参数的对象。

所以,你可以看到有很多方法可以做到这一点。