C# delegate_sql case用法

C# delegate_sql case用法委托从字面上理解就是一种代理,类似于房屋中介,由租房人委托中介为其租赁房屋。在C#语言中,委托则委托某个方法来实现具体的功能。委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。委托在使用时遵循三步走的原则,即定义声明委托、实例化委托以及调用委托。从数据结构来讲,委托是和类一样是一种用户自定义类型。委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。委托是C#语言中的一个特色,通常将委托分为命名方法委托

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

转载于http://c.biancheng.net/view/2932.html

委托从字面上理解就是一种代理,类似于房屋中介,由租房人委托中介为其租赁房屋。

在 C#语言中,委托则委托某个方法来实现具体的功能。

委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。

委托在使用时遵循三步走的原则,即定义声明委托、实例化委托以及调用委托。

从数据结构来讲,委托是和类一样是一种用户自定义类型。

委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。

调用委托的时候,委托包含的所有方法将被执行。

委托是 C# 语言中的一个特色,通常将委托分为命名方法委托、多播委托、匿名委托,其中命名方法委托是使用最多的一种委托。

C#命名方法委托

在 C#语言中命名方法委托是最常用的一种委托,其定义的语法形式如下。

修饰符  delegate  返回值类型  委托名 ( 参数列表 );

Jetbrains全家桶1年46,售后保障稳定

从上面的定义可以看出,委托的定义与方法的定义是相似的。例如定义一个不带参数的委托,代码如下。

public delegate void MyDelegate();

在定义好委托后就到了实例化委托的步骤,命名方法委托在实例化委托时必须带入方法的具体名称。

实例化委托的语法形式如下。

委托名  委托对象名 = new 委托名 ( 方法名 );

委托中传递的方法名既可以是静态方法的名称,也可以是实例方法的名称。

需要注意的是,在委托中所写的方法名必须与委托定义时的返回值类型和参数列表相同。

在实例化委托后即可调用委托,语法形式如下。

委托对象名 ( 参数列表 );

在这里,参数列表中传递的参数与委托定义的参数列表相同即可。

下面分别通过两个实例来演示在委托中应用静态方法和实例方法的形式。

【实例 1】创建委托,在委托中传入静态方法于控制台输出“Hello Delegate!”。

根据题目要求,代码如下。

class Program
{ 
   
    public delegate void MyDelegate();
    static void Main(string[] args)
    { 
   
        MyDelegate myDelegate = new MyDelegate(Test.SayHello);
        myDelegate();
    }
}
class Test
{ 
   
    public static void SayHello()
    { 
   
        Console.WriteLine("Hello Delegate!");
    }
}

执行上面的代码,效果如下图所示。
在这里插入图片描述

若使用静态方法,在向委托中传递方法名时只需要用“类名.方法名”的形式。

【实例 2】将实例 1 中的静态方法改成实例方法。

根据题目要求,代码如下。

class Program
{ 
   
    public delegate void MyDelegate();
    static void Main(string[] args)
    { 
   
        MyDelegate myDelegate = new MyDelegate(new Test().SayHello);
        myDelegate();
    }
}
class Test
{ 
   
    public void SayHello()
    { 
   
        Console.WriteLine("Hello Delegate!");
    }
}

执行上面的代码,效果与实例 1 中效果一致。

由于在委托中使用的是实例方法,则需要通过类的实例来调用方法,即使用“new 类名 (). 方法名”的形式。

除了使用匿名对象的方式调用方法以外,也可以先创建类的实例,再通过类的实例调用方法。

在了解了命名方法委托的写法以后,下面通过一个综合实例来演示命名委托的应用。

【实例 3】使用委托完成将图书信息按照价格升序排序的操作。

根据题目要求,先定义图书信息类,然后定义对图书价格排序的方法。图书信息类的代码如下。

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);
    }
    //重写ToString方法,返回图书名称和价格
    public override string ToString()
    { 
   
        return Name + ":" + Price;
    }
    //图书信息排序
    public static void BookSort(Book[] books)
    { 
   
        Array.Sort(books);
    }
}

在 Main 方法中定义委托调用图书排序的方法,代码如下。

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 code_1.Book("计算机应用", 50);
        book[1] = new code_1.Book("C# 教程", 59);
        book[2] = new code_1.Book("VS2015应用", 49);
        bookDelegate(book);
        foreach(Book bk in book)
        { 
   
            Console.WriteLine(bk);
        }
    }
}

执行上面的代码,效果如下图所示。

从上面的执行效果可以看出,通过委托调用的图书排序方法 (BookSort) 按照图书价格升序排列了图书信息。
在这里插入图片描述

需要注意的是,由于 Book[] 数组是引用类型,因此通过委托调用后其值也发生了相应的变化,即 book 数组中的值已经是完成了排序操作后的结果。

C#多播委托

在 C# 语言中多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中使用加号运算符或者减号运算符来实现添加或撤销方法。

在现实生活中,多播委托的实例是随处可见的,例如某点餐的应用程序,既可以预定普通的餐饮也可以预定蛋糕、鲜花、水果等商品。

在这里委托相当于点餐平台,每一个类型的商品可以理解为在委托上注册的一个方法。

下面通过实例来演示多播委托的应用。

【实例】模拟点餐平台预定不同类型的商品。

根据题目要求,在实例中分别预定快餐、蛋糕、鲜花三类商品,代码如下。

class Program
{ 
   
    //定义购买商品委托
    public delegate void OrderDelegate();
    static void Main(string[] args)
    { 
   
        //实例化委托
        OrderDelegate orderDelegate = new OrderDelegate(Order.BuyFood);
        //向委托中注册方法
        orderDelegate += Order.BuyCake;
        orderDelegate += Order.BuyFlower;
        //调用委托
        orderDelegate();
    }
}
class Order
{ 
   
    public static void BuyFood()
    { 
   
        Console.WriteLine("购买快餐!");
    }
    public static void BuyCake()
    { 
   
        Console.WriteLine("购买蛋糕!");
    }
    public static void BuyFlower()
    { 
   
        Console.WriteLine("购买鲜花!");
    }
}

执行上面的代码,效果如下图所示。
在这里插入图片描述

如果已经购买了鲜花,在未调用委托时也可以撤销,在委托注册方法时使用 -= 操作符即可。

撤销购买鲜花操作的代码如下。

orderDelegate -= Order.BuyFlower;

如果添加了上述代码,则执行效果中就取消了购买鲜花的操作。

在使用多播委托时需要注意,在委托中注册的方法参数列表必须与委托定义的参数列表相同,否则不能将方法添加到委托上。

匿名委托

在 C# 语言中匿名委托是指使用匿名方法注册在委托上,实际上是在委托中通过定义代码块来实现委托的作用,具体的语法形式如下。

//1. 定义委托
修饰符  delegate  返回值类型  委托名 ( 参数列表 );

//2. 定义匿名委托
委托名  委托对象 = delegate
{ 
   
    //代码块
};

//3. 调用匿名委托
委托对象名 ( 参数列表 );

通过上面 3 个步骤即可完成匿名委托的定义和调用,需要注意的是,在定义匿名委托时代码块结束后要在 {} 后加上分号。

下面通过实例来演示匿名委托的应用。

【委托】使用匿名委托计算长方形的面积。

根据题目要求,代码如下。

class Program
{ 
   
    public delegate void AreaDelegate(double length, double width);
    static void Main(string[] args)
    { 
   
        Console.WriteLine("请输入长方形的长:");
        double length = double.Parse(Console.ReadLine());
        Console.WriteLine("请输入长方形的宽:");
        double width = double.Parse(Console.ReadLine());
        AreaDelegate areaDelegate = delegate
        { 
   
            Console.WriteLine("长方形的面积为:" + length * width);
        };
        areaDelegate(length, width);
    }
}

执行上面的代码,效果如下图所示。
在这里插入图片描述

从上面的执行效果可以看岀,在使用匿名委托时并没有定义方法,而是在实例化委托时直接实现了具体的操作。

由于匿名委托并不能很好地实现代码的重用,匿名委托通常适用于实现一些仅需要使用一次委托中代码的情况,并且代码比较少。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234368.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PID控制的MATLAB仿真(1)

    PID控制的MATLAB仿真(1)PID控制应用广泛,说起来PID特别的简单,在比例负反馈的基础上加入微分项实现快速调节,加入积分项实现无静差。MATLAB强大的功能让学习变得非常简单。在学习智能控制这门课的时候,老师推荐了刘金琨老师的先进PID控制一书,边看边学边调程序。下文程序选自此书。首先从模拟PID开始,被控系统一般是下图这种结构:其中PID控制器:一种用模拟PID控制的磁悬浮:电路图左侧是霍尔传

    2022年5月24日
    32
  • 织梦程序做的网站,会员下载的弹窗问题

    织梦程序做的网站,会员下载的弹窗问题

    2021年9月25日
    38
  • pytest 执行用例_pytest怎么指定部分用例执行

    pytest 执行用例_pytest怎么指定部分用例执行前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年7月31日
    3
  • 如何利用腾讯云服务器搭建个人网站[通俗易懂]

    如何利用腾讯云服务器搭建个人网站[通俗易懂]你是否想要搭建一个网站,却苦苦找不到方法,你是否看到别人搭建的网站,自己羡慕不已,今天,就教大家来搭建一个简单的个人网站。在这里,我采用的是腾讯云服务器搭建的。首先,需要注册腾讯云账号,登录腾讯云,点击控制台进入控制台后,选择域名注册看到的结果如下图所示:开始注册域名:提交订单后,域名就注册成功了。接下来需要购买云主机(云服务器),流程如下用…

    2022年6月29日
    44
  • Spring Boot定制首页和404页面

    Spring Boot定制首页和404页面一、定制首页:方式一:SpringBoot自动映射在静态资源目录resources、static、public的其中一个目录中创建index.html文件,springBoot会自动识别,将这个文件作为首页访问 方式二:使用thymeleaf模板引擎1.导入依赖<!–Thymeleaf模板引擎依赖–><dependency><groupId>org.thymeleaf</groupId><artifact

    2022年7月27日
    13
  • CheckBox多选按钮实现CompoundButton.OnCheckedChangeListener

    CheckBox多选按钮实现CompoundButton.OnCheckedChangeListeneractivity_main.xml

    2022年6月7日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号