来自 电脑系统 2019-09-27 01:15 的文章
当前位置: 金沙澳门官网网址 > 电脑系统 > 正文

委托学习笔记后续

引言:

  最先学习c#时,认为委托、事件那块很难,在那之中在求学的长河中还写了一篇学习笔记:委托、事件学习笔记。前些天重新温故委托、事件,何况把多年来上学到和寄托有关的无名氏格局、Lambda表明式及泛型委托记录下来,以备复习使用。

委托:

  常常职业中,经常见到委托用在具体的体系中。并且信托行使起来相对来讲也是特轻便的,上边罗列三个寄托实例用以注脚怎么着行使委托,代码如下:

class Program    {        public delegate int CalculateDelegate(int x, int y);        static void Main(string[] args)        {            CalculateDelegate calculateDelegate = new CalculateDelegate;            int result = calculateDelegate(2, 3);        }        public static int Add(int x, int y)        {            return x + y;        }    }

从上例中能够看出,使用三个信托分为四个步骤:

1)注明一(Wissu)个寄托:public delegate int CalculateDelegate(int x, int y);

2)定义贰个寄托对象并绑定方法:CalculateDelegate calculateDelegate = new CalculateDelegate;

3)调用委托:int result = calculateDelegate;

中间第二步、第三步的写法和豪门有出入,平日很四个人喜欢这样写:

1)声美赞臣个委托

2)定义贰个寄托要绑定的法子

3)定义二个信托,绑定上述定义的主意

匿超级模特式:

使用方面编写的嘱托实例,描述无名氏格局到底为什么物,是怎么选拔的。委托绑定方法达成如下:

CalculateDelegate calculateDelegate = new CalculateDelegate;public static int Add(int x, int y)        {            return x + y;        }

若是采用匿超级模特式重写上边的点子,代码如下:

CalculateDelegate calculateDelegate = delegate(int x, int y){return x + y;};

看得出:匿有名的模特式绑定委托间接节约了编辑二个独立的措施,使得代码更为简单。

类型中,使用委托时,非常多时候编辑器会帮忙我们把办法直接放入适当的量的委托对象中,但不时编辑器帮助不了大家,比方:Control.Dispatcher.Invoke. 比如:

this.btnExit .Dispatcher .Invoke (new Action => {}));

注:感激园友上位者的体恤的视角。

Lambda表达式:

用Lambda表明式重写上面运用无名氏情势编写的委托实例,在无名方式的功底上,编写如下:

方式一:

CalculateDelegate calculateDelegate = (int x, int y) => { return x + y; };

方式二:

CalculateDelegate calculateDelegate =  => { return x + y; };

方式三:

CalculateDelegate calculateDelegate =  => x + y;

从上面能够观望,Lambda仅仅是在佚名方式的根基上助长 => 符号,可是却让全部代码完结起来显得愈发优雅。

泛型委托:

在.net平台下有Microsoft自带的泛型委托,如:Action,Action<T>,Fun<T>等。实际采用中,假如急需运用泛型委托,系统内置的委托基本上就能够满足须求了,上边一一介绍它们的原型及调用实例。

Action

系统封装的Action委托,未有参数未有重回值。调用实例为:

class Program    {        public delegate void Action();        static void Main(string[] args)        {            Action action = new Action;            action();        }        private static void Method()        {            Console.WriteLine("i am is a action");        }    }

若果措施的发布很简短,能够应用Lambda表明式,代码如下:

Action action = () => { Console.WriteLine("i am is a action"); };            action();

Action<T>

系统封装的Action<T>委托,有参数可是从未重回值。调用实例为:

class Program    {        public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);        static void Main(string[] args)        {            Action<int,int> action = new Action<int,int>;            action(2,3);        }        private static void Method(int x,int y)        {            Console.WriteLine("i am is a action");        }    }

使用拉姆da表明式编写Action<T>代码如下:

Action<int, int> action =  => { Console.WriteLine("i am is a action"); };            action(2,3);

Fun<T>

系统封装的Fun<T>委托,有重临值。调用实例为:

class Program    {        public delegate TResult Fun<in T1, in T2, out TResult>(T1 arg1, T2 arg2);        static void Main(string[] args)        {            Fun<int, int, bool> fun = new Fun<int, int, bool>;            bool ret = fun(2,3);        }        private static bool Method(int x,int y)        {            if (x + y == 5)            {                return true;            }            else            {                return false;            }        }    }

金沙澳门官网网址 ,动用Lambda表明式编写Fun<T>,代码如下:

Fun<int, int, bool> fun =  =>            {                if (x + y == 5)                {                    return true;                }                else                {                    return false;                }            };            bool ret = fun(2,3);

Fun<T>未有参数有再次回到值的场合:

Fun<bool> fun = () =>            {                int x = 4;                int y = 3;                if (x + y == 5)                {                    return true;                }                else                {                    return false;                }            };            //也可以如此编写            Fun<bool> fun = () => false;

此种意况相当少使用,而且由于力量轻巧,一时半刻看不出来使用它们的意义所在。

总结:

  在平常的档期的顺序中,常见的信托项目及实例本质上也是上述所说的二种。除了这么些之外还大概有一点点别的的委托方法,资质有限精力有限,此处暂且不提,今后蒙受在另当别论。

本文由金沙澳门官网网址发布于电脑系统,转载请注明出处:委托学习笔记后续

关键词: