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

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

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pycharm怎么安装python库_win10专业版怎么安装

    pycharm怎么安装python库_win10专业版怎么安装准备开始的时候,发现没下载库有些库直接下载是不行的解决办法(社区版)第一步:打开Pycharm第二步:点File->DefaultSettings->ProjectInterpreter->点加号第三步:搜索Pygame->InstallPackage不同于社区版,专业版是直接搜pythonInterpreter点加号,搜想要的库,点击Install直接起飞…

  • 密码学的基础知识_密码学的基本概念

    密码学的基础知识_密码学的基本概念最近在研究密码学加密,签名方面的东西。经过几天的学习对一些基础知识进行一下整理PKI:PKI是PublicKeyInfrastructure的首字母缩写,翻译过来就是公钥基础设施,在X509标准

  • 移位运算用法总结

    移位运算用法总结位运算总结原文一、位运算应用口诀清零取位要用与,某位置一可用或若要取反和交换,轻轻松松用异或二、移位运算它们都是双目运算符,两个运算分量都是整形,结果也是整形。‘&lt;&lt;’左移:右边空出的位置补0,其值相当于乘以2。‘&gt;&gt;’右移:左边空出的位,如果是正数则补0,若为负数则补0或1,取决于所用的计算机系统OSX中补1。其值相当于除以2。…

  • java中static归纳总结

    java中static归纳总结在《Java编程思想》P86页有这样一段话:  “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”  这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:  方便在没有…

  • python tkinter库 密码实时显示_python tkinter库实现气泡屏保和锁屏

    python tkinter库 密码实时显示_python tkinter库实现气泡屏保和锁屏本文实例为大家分享了pythontkinter库实现气泡屏保和锁屏的具体代码,供大家参考,具体内容如下显示效果如下:代码:importrandomimporttkinterimportthreadingfromctypesimport*classRandomBall(object):”””定义关于球的类”””def__init__(self,canvas,screen_wid…

  • 多重比较法-LSD[通俗易懂]

    多重比较法-LSD[通俗易懂]总第174篇/张俊红前面我们讲了方差分析,方差分析主要是用于多组均值比较的,方差分析的结果是多组均值之间是否有显著性差异,但是这个显著性差异是整体的显著性差异,可是我们并…

发表回复

您的电子邮箱地址不会被公开。

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