原来是想写一篇关于委托的博客的,但是看了http://www.tracefact.net/tech/009.html关于C#委托的博客,不想写了
怎么写都不会有人家的好。
一、将方法作为参数传递
https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/delegates
委托类型表示对具有特定参数列表和返回类型的方法的引用。 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。 委托类似于其他一些语言中的函数指针概念,但与函数指针不同的是,委托不仅面向对象,还类型安全。
using System;
delegate double Function(double x);
class Multiplier
{
double factor;
public Multiplier(double factor)
{
this.factor = factor;
}
public double Multiply(double x)
{
return x * factor;
}
}
class DelegateExample
{
static double Square(double x)
{
return x * x;
}
static double[] Apply(double[] a, Function f)
{
double[] result = new double[a.Length];
for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);
return result;
}
static void Main()
{
double[] a = {0.0, 0.5, 1.0};
double[] squares = Apply(a, Square);
double[] sines = Apply(a, Math.Sin);
Multiplier m = new Multiplier(2.0);
double[] doubles = Apply(a, m.Multiply);
}
}
二、调用事件
是带event关键字的委托实例
访问修饰符 event 委托名 事件名;
public partial class FormMeasureResult : Form
{
//委托
public delegate void FormClosedEventHandler();
public event FormClosedEventHandler frmClosed = null;
public FormMeasureResult()
{
InitializeComponent();
}
private void FormMeasureResult_FormClosed(object sender, FormClosedEventArgs e)
{
if (frmClosed != null)
{
frmClosed();
}
}
}
private void frmMeasureResult_frmColsed() //FormColsed事件
{
//清空线对象
if (pNewLineFeedback != null)
{
pNewLineFeedback.Stop();
pNewLineFeedback = null;
}
//清空面对象
if (pNewPolygonFeedback != null)
{
pNewPolygonFeedback.Stop();
pNewPolygonFeedback = null;
pAreaPointCol.RemovePoints(0, pAreaPointCol.PointCount); //清空点集中所有点
}
//清空量算画的线、面对象
axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
//结束量算功能
pMouseOperate = string.Empty;
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;
}