2010-12-09 4 views
3

Привет Я кратко изложил свою проблему в следующем фрагменте кода. В первом коде я объявил делегат и событие в том же классе, что и в Код 2 Я объявил делегат и событие в отдельном классе.Объявление делегата

Код 1

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     delegate void Greeting(string s); 
     event Greeting myEvent; 
     void OnFire(string s) 
     { 
      if (myEvent != null) 
       myEvent(s); 

     } 
     static void Main(string[] args) 
     { 
      Program obj = new Program(); 
      obj.myEvent += new Greeting(obj_myEvent); 
      obj.OnFire("World"); 
     } 

     static void obj_myEvent(string s) 
     { 
      Console.WriteLine("Hello " + s + "!"); 
     } 
    } 
} 

код 2

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DelegateDemo obj = new DelegateDemo(); 
      obj.myEvent+=new DelegateDemo.Greeting(obj_myEvent); 
      obj.OnFire("World"); 
     } 

     static void obj_myEvent(string s) 
     { 
      Console.WriteLine("Hello "+s +"!"); 
     } 
    } 
} 

DelegateDemo.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    public class DelegateDemo 
    { 
     public delegate void Greeting(string s); 
     public event Greeting myEvent; 
     public void OnFire(string s) 
     { 
      if (myEvent != null) 
       myEvent(s); 

     } 
    } 
} 

Теперь у меня есть один Ques Имеются ли какие-либо различия (например, потокобезопасность, производительность) между этими двумя фрагментами кода?

+0

определить `разница`! – 2010-12-09 12:08:51

+0

@Andreas: Как безопасность потока, производительность. – 2010-12-09 12:10:36

ответ

2

Единственное отличие, по-видимому, в использовании отдельного класса. Таким образом, нет: до тех пор, пока доступны методы и типы, очень мало функциональных различий.

В качестве примечания, вы можете рассмотреть Action<string> для делегата, который принимает string и возвращает void, но также отметить, что события должны вообще следовать (object sender, SomeEventArgsClass e) шаблон (где SomeEventArgsClass:EventArgs, возможно также с помощью EventHandler<T>)

2

На самом деле нет никакой разницы, но вы должны определить делегаты вне классов, поскольку делегат - это класс (полученный от делегата).

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