代表们的实际执行情况

时间:2011-11-09 06:28:16

标签: c#

在我看来,代表似乎是要学习的具有挑战性的概念之一。

根据我的理解,delegate是一个方法指针,指向运行时的特定方法。

我代表的一个例子是在文件处理期间,在调用方法之前可以执行某些文件操作,并在方法调用之后释放文件资源。在这里使用委托可以提高可重用性。

我的问题是,你能否告诉我代表们在日常节目中的其他实际用途?

感谢提前!

4 个答案:

答案 0 :(得分:3)

嗯,总的来说,代表最主要的用途是通过事件及其处理程序。我不知道你是否已经意识到这一点,因为你提出了问题的方式,但每次写作都是

someObj.SomeEvent += SomeMethod;

您正在使用委托,具体而言,SomeMethod正由委托实例包装。

答案 1 :(得分:0)

答案 2 :(得分:0)

您还将使用带有线程的委托:

//Anynymous delegate
new Thread(delegate() 
{
      Console.WriteLine("Hello world form Thread");
});

//Lambda expression
new Thread(() => 
{
      Console.WriteLine("Hello world form Thread");
});

看一下lambda表达式,它功能强大:Lambda expression

答案 3 :(得分:0)

与自定义事件处理程序一起使用时,委托很有用。

  

代表是您可以为您的调用方法定义的规则   运行时间。

     

E.g public delegate void NameIndicator(string name);

您可以将方法绑定到委托并将其注册到事件。

请参阅下面的示例。

public delegate void NameIndicator( string name );

class Program
{
    static void Main( string[] args )
    {
        //Create the instance of the class
        Car car = new Car( "Audi" );
        //Register the event with the corresponding method using the delegate
        car.Name += new NameIndicator( Name );
        //Call the start to invoke the Name method below at runtime.
        car.Start();
        Console.Read();
    }

    /// <summary>
    /// The method that can subscribe the event of the defined class.
    /// </summary>
    /// <param name="name">Name assigned from the caller.</param>
    private static void Name( string name )
    {
        Console.WriteLine( name );
    }

}

public class Car
{
    //Event for the car class.
    public event NameIndicator Name;
    string name;

    public Car( string nameParam )
    {
        name = nameParam;
    }

    //Invoke the event when the start method is called.
    public virtual void Start()
    {
        Name( name );
    }
}