C#中的委托(Delegate)

代码和备注详解,简单的例子

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();
        }
    }
}


运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就喝白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值