2012-10-09 2 views
2

база на страницах msdn, когда мы объявляем делегата, нам нужно указать возвращаемое значение, а также аргумент метода, который будет вызываться через делегат.Объявление делегата для методов с различными возвращаемыми значениями и аргументами

мой вопрос:

скажем, у меня есть метод, как:

public int MethodA(bool bValue), а также void MethodB(int iValue)

мне нужно объявить два различных делегатов здесь для каждого метода, или я могу сделать это с помощью одного Do ?

Спасибо.

ответ

2

Нужно ли объявлять двух разных делегатов для каждого метода, или я могу сделать это с помощью одного?

Поскольку эти методы имеют совершенно разные сигнатуры, вам нужны разные делегаты. Тем не менее, вы можете использовать встроенные делегаты Func<bool, int> и Action<int> вместо объявления своих собственных типов делегатов.

Например, вы можете использовать:

Func<bool,int> delegateA = this.MethodA; 

Action<int> delegateB = this.MethodB; 
// or: Action<int> delegateB = new Action<int>(this.MethodB); 
+0

Hi Reed, не могли бы вы показать мне пример? Я новичок в этом. Благодаря! –

+0

@amitkohan Отредактировано для отображения - что вы хотите? –

+0

Спасибо за ваш ответ. У меня есть идеи. Я предполагаю, что это хорошая статья для изучения в этом отношении. Не могли бы вы подтвердить это? http://msdn.microsoft.com/en-us/library/dd465122.aspx –

1

Точка объявляя делегатов в первую очередь тем, что вы могли бы назвать метод, не видя своего заявления. Вот почему вам нужен другой тип делегата для каждой сигнатуры функции, которую вы планируете называть косвенно через делегата.

+0

, как вы сказали, «вызов метода, не видя его объявления». Это звучит очень интересно, но страница msdn, которую я читаю, говорит, что мы должны объявить число/тип аргументов, а также вернуть тип метода. Итак, как это работает? Я до сих пор не совсем понимаю, что касается всего делегирования –

+0

@amitkohan Объявление делегата - это не то же самое, что объявить метод. Объявив делегата, вы указываете, какие методы могут быть переданы для этого делегата без объявления этих методов, только их подпись (типы параметров + тип возврата). – dasblinkenlight

0

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

class Program{ 
    delegate void MethodsDelegate(string Message); 
    static void Main(string[] args){ 
    MethodsDelegate method = delegate(string Message){ 
    Console.WriteLine(Message); 
    }; 
    //---call the delegated method--- 
method("Using anonymous method."); 
Console.ReadLine(); 
    } 
} 
+0

Спасибо за то, что вы взяли, чтобы показать мне этот фрагмент, но я не следую методу, который у нас есть. Какова его возвращаемая стоимость? Я думаю, его аргумент является строкой, поэтому ее возвращаемое значение может быть недействительным? –

+0

@amitkohan, потому что это возвращаемое значение недействительно, вы должны заметить, что из анонимного метода не возвращается значение. –

Смежные вопросы