2014-09-04 3 views
1

Привет, есть ли способ создать метод, который принимает любой метод? я имею в виду какой-либо параметр, он имеет или сколько параметр имеетСоздать метод с параметром динамического действия

void SampleMethod(Action<dynamic> Action) 
{ 
} 

В настоящее время я делаю это, как это, но я думаю, что я делаю неправильно, есть ли способ сделать это? имеет ли он параметр или много или без параметра.

Я делаю неправильно или я просто что-то пропустил?

Я попробовал этот код

void SampleMethod(Action Action) 
{ 
} 

но мне кажется, что он принимает только метод без параметра я делаю неправильно?

+5

Что вы хотите сделать с помощью метода? Не зная, сколько параметров он получает и какой тип они есть, как вы собираетесь называть его? – nvoigt

ответ

1

с отражением,

SampleMethod(this.GetType().GetMethod("WriteHello"), "Hello"); 

    public void WriteHello(string param) 
    { 
     Debug.WriteLine(param); 
    } 

    public void SampleMethod(MethodInfo mi, params object[] arguments) 
    { 
     mi.Invoke(this,arguments);   
    } 
+0

Кстати, мы можем расширить этот подход с большим отражением. Но я думаю, что если мы будем устанавливать параметры метода. Сначала мы должны знать их. Таким образом, нет никакого смысла в поиске добрых параметров. Я просто ответил в соответствии с моим пониманием вопроса. –

1

Я думаю, что Delegate - это то, что вы ищете.

static void A1() { 
    Console.Out.WriteLine("A1"); 
} 

static void A2(int foo) { 
    Console.Out.WriteLine("A2"); 
} 

static void SampleMethod(Delegate dlgt) { 
} 

Использование:

SampleMethod(new Action(A1)); 
SampleMethod(new Action<int>(A2)); 

Вы можете вызвать метод с помощью DynamicInvoke(), однако вы должны будете предоставить точный список аргументов.

static void SampleMethod(Delegate dlgt) { 
    // ok for A1, will throw an exception for A2 
    dlgt.DynamicInvoke(null); 
} 
Смежные вопросы