Есть делегат типа:
delegate void abc(ref MySqlConnection dbconn,int a, int b);
abc f;
И две функции:
public void a(ref MySqlConnection dbconn,int a);
public void b(ref MySqlConnection dbconn,int a, int b);
Как присвоить переменной f сначала функцию a, а потом b?
Делал по статье
здесь
Конструкция вида:
f = (abc)Delegate.CreateDelegate(
type: typeof(abc)
,method: typeof(MainForm).GetMethod("a")
);
Выполняется с ошибкой Error binding to target method.;
Здравствуйте, b099ard, Вы писали:
B>Есть делегат типа:
Вы нехороший человек
, зачем же объявлять функции, которые не компилятся.
В общем работающий код вот (я заменил MySqlConnection на string):
delegate void abc(ref string dbconn,int a, int b);
public static void MethodA(ref string dbconn,int a)
{}
public static void MethodB(ref string dbconn,int a, int b)
{}
void Main()
{
abc f;
f = (ref string dbConn, int a, int b) => MethodA(ref dbConn, a);
f = MethodB;
string conn = "";
// Если сейчас f указывает на MethodA, то третий параметр (2) будет просто
// проигнорирован
f(ref conn, 1, 2);
}
Хотя разумной эта идея не кажется. Когда вы "присваиваете" вашей переменной f "указатель" на MethodA, вы игнорируете параметр b вашего исходного делегата. Я еще пойму вариант, когда ваш делегат abc содержал бы два параметра, и в случае "сохранения" в нем укзаателя на MethodB, вы бы использовали некоторый параметр по умолчанию для параметра b метода MethodB.
Кстати, в чем тайный смысл передачи соединения по ссылке? Вы собираетесь изменять саму ссылку? Вы точно знаете, что делаете в этом случае?