2015-12-07 8 views
-1

Я пытаюсь написать что-то подобное, используя универсальный классКак передать в качестве параметра имя функции и ее параметров?

MyGenericClass<IMyType> myGenericClass = new MyGenericClass<IMyType>(); 
myGenericClass.SetMethod(s=> s.MethodOfMyType(), parameter1, parameter2) 

Having

interface IMyType 
{ 
    int MethodOfMyType(string parameter1, string parameter2); 
} 

Я не очень хорошо знаком с лямбда-выражения. Это возможно в C#?

EDIT:

Я добавляю код псевдокод для MyGenericClass, чтобы попытаться сделать это более ясным:

class MyGenericClass<T> 
    { 
     public SetMethod(....Here I don't know what kind of parameters i should use) 
     { 
     } 
    } 
+0

Не совсем понятно, чего вы пытаетесь достичь. –

+0

Я пытаюсь понять, можно ли объявить метод с параметрами, которые могут использоваться как первая часть вышеприведенного кода. Метод из класса Generic, который может принимать в качестве параметра функцию из родового типа и параметров этой функции. – Guigui

ответ

0

Может быть, вы иметь в виду что-то вроде этого?

myGenericClass.SetMethod((s,p1,p2) => s.MethodOfMyType(parameter1, parameter2), p1, p2); 

Мой окончательный код:

class MyGenericClass 
{ 
    public void SetMethod<T>(Func<T, string, string, int> method) 
     where T : IMyType 
    { 
    } 
} 

MyGenericClass myGenericClass = new MyGenericClass(); 
myGenericClass.SetMethod<IMyType>((t, s1, s2) => t.MethodOfMyType(s1, s2)); 

Если вы хотите передать параметры позже вы можете добавить их в SetMethod. Или, если вы хотите иметь аргумент «AllInOne», вы можете использовать partial function application.

var str1 = "MyString1"; 
var str2 = "MyString2"; 
Func<string, string, IMyType, int> sourceMethod = (s1, s2, t) => t.MethodOfMyType(s1, s2); 
Func<IMyType, int> partialMethod = (t) => t.MethodOfMyType(str1, str2); 
Смежные вопросы