c#委托(delegate)

委托的概念

委托是一种特殊的类型,可以保存方法

delegate RetType DelegateName(Type1 name1, Type2 name2);

关键字 delegate 用来定义委托,也翻译成代理

委托是一种类型,与 class 的地位是对等的

定义委托类型的变量

DelegateName myDelegation = new DelegateName(SomeMethod);

// 或者简写为

DelegateName myDelegation = SomeMethod;

可以赋予的变量是满足代理定义的方法,要求返回值和参数列表都一样


使用委托

很多时候,我们需要依情况调用不同的方法。传统思路是采用 if 判断,分支是比较拖效率的操作。

例子:分子结构模拟

在化学中,分子相互作用力有不同的势函数模型,这些函数的输入输出类型完全相同,仅计算过程不同

程序运行前,需要手动配置使用哪种势函数模型,程序运行时,势函数不会改变

一次模拟至少需要调用 1 亿次势函数

在化学领域,势函数模型还在不断更新,甚至有研究人员在做创新实验

使用委托

前提:有一组返回值以及参数类型都相同的方法

double Add(double a, double b)

double Subtract(double a, double b)

double Multiply(double a, double b)

定义一个委托,保证返回值与参数类型都匹配

delegate double SuperComputer(double a, double b)

定义委托类型的变量

SuperComputer sc = Add;

SuperComputer su = SomeClass.Subtract;

SuperComputer so = obj.Multiply;

委托会受制于访问修饰符,但是不限制来自于哪个类、哪个对象,也可以是 static 方法。仅需要方法返回值以及参数类型都相同。

你可能感兴趣的:(c#委托(delegate))