沈阳学校网站建设,关于我们做网站,论坛网站建设教程,宁波网站建设论坛C# 扩展方法
假设该类是密封的#xff0c;不能访问代码#xff0c;或有其他的设计原因使这些方法不能工作#xff0c;就不得不在另一个类中使用该类的公有可用成员编写一个方法。 假设这个类是密封的#xff1a; sealed class MyData{double D1;double D2;double D3;publi…C# 扩展方法
假设该类是密封的不能访问代码或有其他的设计原因使这些方法不能工作就不得不在另一个类中使用该类的公有可用成员编写一个方法。 假设这个类是密封的 sealed class MyData{double D1;double D2;double D3;public MyData(double d1,double d2,double d3){ D1 d1;D2 d2; D3 d3; }public double Sum(){return D1 D2 D3; ; ;}}上述类中计算了三个数的和假如我们需要计算三个数的平均值 那就需要重新写一个类如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WFM_Thread
{public partial class Form9 : Form{public Form9(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){MyData myData new MyData(3, 4, 5);double average ExtendMyData.Average(myData);Console.WriteLine(平均值为{0}, average);}}static class ExtendMyData{public static double Average(MyData md){return md.Sum() / 3;}}
}
注意看上述的代码使用的是 ExtendMyData.Average(myData)但如果能在类的实例自身上调用该方法而不是创建另一个作用于它的类的示例将会更优雅。 ExtendMyData.Average(myData)//静态调用形式myData.Average();//实例调用形式
下面将类ExtendMyData改编成为类MyData的扩展方法
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WFM_Thread
{public partial class Form9 : Form{public Form9(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){MyData myData new MyData(3, 4, 5);double average myData.Average();Console.WriteLine(平均值为{0}, average);}}static class ExtendMyData{public static double Average(this MyData md){return md.Sum() / 3;}}
}
扩展方法的重要要求如下 声明扩展方法的类必须声明为static; 扩展方法本身必须声明为static 扩展方法必须包含关键字this作为它的第一个参数类型并在后面跟着它所扩展的类的名称。