Delegates with Named vs. Anonymous Methods 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Delegates with Named vs. Anonymous Methods



A delegate can be associated with a named method. When you instantiate a delegate by using a named method, the method is passed as a parameter, for example:

// Declare a delegate: delegate void Del(int x);   // Define a named method: void DoWork(int k) { /*... */ }   // Instantiate the delegate using the method as a parameter: Del d = obj.DoWork;

This is called using a named method. Delegates constructed with a named method can encapsulate either a static method or an instanced method. Named methods are the only way to instantiate a delegate in earlier versions of C#. However, in a situation where creating a new method is unwanted overhead, C# enables you to instantiate a delegate and immediately specify a code block that the delegate will process when it is called. These are called Anonymous Methods.

Remarks

The method that you pass as a delegate parameter must have the same signature as the delegate declaration.

A delegate instance may encapsulate either static or instance method.

Although the delegate can use an out parameter, we do not recommend its use with multicast event delegates because you cannot know which delegate will be called.

 


Делегаты с именованными методами и делегаты с анонимными методами

Делегат может быть назначен именованному методу. При создании экземпляра делегата с помощью именованного метода этот метод передается в качестве параметра, например:

ß------

Это называется использованием именованного метода. Делегаты, созданные с помощью именованного метода, могут инкапсулировать статический метод или метод экземпляра. Именованные методы являются единственным способом создания экземпляра делегата в ранних версиях C#. Однако в ситуациях, когда создание нового метода является нежелательным, C# позволяет создать экземпляр делегата и сразу же указать блок кода, обрабатываемый делегатом при вызове. Дополнительные сведения см. в разделе Анонимные методы.

Заметки

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

Экземпляр делегата может инкапсулировать статический метод или метод экземпляра.

Хотя делегат может использовать параметр out, с делегатами групповых событий его использование не рекомендуется, так как при этом нельзя определить, какой делегат будет вызван.

 


Example 1

The following is a simple example of declaring and using a delegate. Notice that both the delegate, Del, and the associated method, MultiplyNumbers, have the same signature

// Declare a delegate delegate void Del(int i, double j);   class MathClass { static void Main() { MathClass m = new MathClass();   // Delegate instantiation using "MultiplyNumbers" Del d = m.MultiplyNumbers;   // Invoke the delegate object. System.Console.WriteLine("Invoking the delegate using 'MultiplyNumbers':"); for (int i = 1; i <= 5; i++) { d(i, 2); } }   // Declare the associated method. void MultiplyNumbers(int m, double n) { System.Console.Write(m * n + " "); } }

Output

Invoking the delegate using 'MultiplyNumbers':

2 4 6 8 10

 


Пример 1

Ниже приведен простой пример объявления и использования делегата. Обратите внимание на то, что как делегат Del, так и сопоставленный метод MultiplyNumbers имеют одинаковую подпись

ß-----

 

 

Результат

Invoking the delegate using 'MultiplyNumbers':

2 4 6 8 10

 


Example 2

In the following example, one delegate is mapped to both static and instance methods and returns specific information from each.

// Declare a delegate delegate void Del();   class SampleClass { public void InstanceMethod() { System.Console.WriteLine("A message from the instance method."); }   static public void StaticMethod() { System.Console.WriteLine("A message from the static method."); } }   class TestSampleClass { static void Main() { SampleClass sc = new SampleClass();   // Map the delegate to the instance method: Del d = sc.InstanceMethod; d();   // Map to the static method: d = SampleClass.StaticMethod; d(); } }

Output

A message from the instance method.

A message from the static method.


Пример 2

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

 

ß----

 

Результат

A message from the instance method.

A message from the static method.

 



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 142; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.240.178 (0.005 с.)