代码和备注详解,简单的例子
using System;
/*
委托(Delegate)
委托字面理解就是一种代理,就想是房地产中介
C#中委托是委托某个方法去实现具体的功能
委托是一种引用类型,委托在使用时,要定义声明委托、实例化委托以及调用委托。
从结构上说,委托和类一样是用户自定义的类型
委托是方法的抽象,它存储的就是一系列具有相同签名和返回值类型的方法和地址。
调用委托时,委托包含的所有方法将被执行。
*/
namespace MySpace
{
///定义委托的语法
///修饰符 delegate 返回值类型 委托名(参数列表)
///public delegate void MyDelegate();
///实例化委托的语法
///委托名 委托对象名 = new 委托名(方法名)
///
///调用委托的语法
///委托对象名(参数列表)
///
class Program
{
//定义委托
public delegate void MyDelegate();
static void Main(string[] args)
{
//实例化委托,静态方法的
MyDelegate myDelegate1 = new MyDelegate(Test.SayHello1);
//调用委托
myDelegate1();
//实例化委托,非静态方法的
MyDelegate myDelegate2 = new MyDelegate(new Test().SayHello2);
myDelegate2();
}
}
class Test
{
public static void SayHello1()
{
Console.WriteLine(" static Hello Delegate!");
}
public void SayHello2()
{
Console.WriteLine("Hello Delegate!");
}
}
}
运行结果:
来个复杂点的:
using System;
namespace MySpace
{
class Book : IComparable<Book>
{
public Book(string name, double price)
{
Name = name;
Price = price;
}
public string Name { get; set; }
public double Price { get; set; }
public int CompareTo(Book other)
{
return (int)(this.Price - other.Price);
}
public override string ToString()
{
return Name + ":" + Price;
}
public static void BookSort(Book[] books)
{
Array.Sort(books);
}
}
class Program
{
public delegate void BookDelegate(Book[] books);
static void Main(string[] args)
{
BookDelegate bookDelegate = new BookDelegate(Book.BookSort);
Book[] book = new Book[3];
book[0] = new MySpace.Book("计算机应用", 50);
book[1] = new MySpace.Book("C#教程", 60);
book[2] = new MySpace.Book("vs2017应用", 55);
bookDelegate(book);
foreach(Book bk in book)
{
Console.WriteLine(bk);
}
Console.ReadKey();
}
}
}
运行结果: