C#Delegate(委托)小案例

委托:一种类型,表示方法引用的类型;一个委托是一个指向方法的引用,或者说,一个委托的实例就是一个指向某个方法的对象,这是一个简单却十分强的的概念

首先委托的定义格式

public delegate 返回值 Mydelegate(参数列表);

其实委托的定义和函数的定义差不多,就是委托多了一个deleagate关键字。

定义好了委托我们可以怎么使用呢?

         static void Add1(int a, int b)
        {
            Console.WriteLine(a+b);
        }

        static void Sub(int a, int b)
        {
            Console.WriteLine(a - b);

        }

        static string Print(int a)

        {

            renturn a.toString();

         }

   static string Print1(int b)

        {

            renturn b.toString();

         }

这是四个静态方法

我们可以使用 Mydelegate mydelegate = Sub; mydelegate(1,1)就调用了Sub方法

mydelegate(1,1) 和Sub(1,1)是一样的都是调用了Sub方法

这就是一个怎么使用委托的方法

还可以mydelegate += Add1;都是可以的


委托有两种类型

一种是Action无返回值,无参数列表的委托

 一种是Action<>无返回值,有参数列表的的委托类型

Func<T>是一种返回值为T类型的委托类型(T是泛型)


比如说可以 Action<int,int> add1 = Add1;

add1(1,2) ;

Func<int,stirng> add = Print; 第一个为int 类型的参数,第二个为返回值

add+=print1;

add(1);

要注意的是Func<T>返回值类型为T类型的委托类型,当Fun中委托对象指向了多个方法时,返回最后一个执行的方法


下面看一个小案例,输入一个字符串

要求1。将所有的大写字母变成小写

     2 。将所有的小写字母变成大些,

    3。将输入的字符串后面+*号

 static string ToUpper(string str)
        {
            return str.ToUpper();
        }

        static string ToLower(string str)
        {
            return str.ToLower();
        }

        static string ToStar(string str)
        {
            return str + "*";
        }

        static void Mydelegate(Func<string,string> func,string str)

        {

            Console.WriteLine(func(str));

        }

在Main函数中测试

Mydelegate(ToUpper, "abc");   //ABC

Mydelegate(ToLower, "ABC"); abc

Mydelegate(ToStar, "abc"); abc*


猜你喜欢

转载自blog.csdn.net/weixin_41765385/article/details/80977165