grf920

博客园 首页 新随笔 联系 订阅 管理

 

答:使用委托的主要优势是它可以将方法作为参数传递给其他方法或对象。这使得代码更加灵活和可重用,因为它允许您在运行时动态地更改方法的行为。

例如,假设您一个方法,它需要执行某些操作并在完成后通知调用方。如果您直接调用该方法,那么您只能执行该方法的行为,而无法更改它的行为。但是,如果您使用委托将该方法作为参数传递给其他方法或对象,那么可以在运行时动态地更改该方法的行为,从而使代码更加灵活和可重用。

委托相对于直接调用方法的优点

cCopyusing System;

 

public delegate void MyDelegate(string message);

 

class MyClass

{

public void MethodA(string message)

{

Console.WriteLine("MethodA: " + message);

}

 

public void MethodB(string message)

{

Console.WriteLine("MethodB: " + message.ToUpper());

}

}

 

public class Program

{

static void Main(string[] args)

{

MyClass myClass = new MyClass();

 

// 声明委托

MyDelegate myDelegate;

 

// 实例化委托并指定目标方法

myDelegate = new MyDelegate(myClass.MethodA);

 

// 调用委托

myDelegate("Hello, World!");

 

// 更改委托目标方法

myDelegate = new MyDelegate(myClass.MethodB);

 

// 调用委托

myDelegate("Hello, World!");

}

}

在上面的代码中,我们首先声明了一个名为MyDelegate的委托,它接受一个字符串参数并且没有返回值。然后我们定义了一个MyClass类,其中包含两个方法MethodA和MethodB。MethodA方法将传递的字符串原样输出,而MethodB方法将传递的字符串转换为大写并输出。

Main方法中,我们创建了一个MyClass对象,并实例化了一个MyDelegate委托并将其指向MyClass对象的MethodA方法。然后我们调用MyDelegate委托并传递一个字符串参数。接着,我们更改MyDelegate委托的目标方法为MyClass对象的MethodB方法,并再次调用MyDelegate委托并传递一个字符串参数。这次,输出的字符串将被转换为大写。

这个示例演示了委托的优点,即它允许您在运行时动态地更改方法的行为。在这个示例中,我们可以轻松地更改MyDelegate委托的目标方法,从而使输出的字符串发生变化。这使得代码更加灵活和可重用,因为它允许您在运行时动态地更改方法的行为。

 

posted on 2023-08-17 10:56  Mostary  阅读(92)  评论(0编辑  收藏  举报