using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
* 扩展方法允许编写和声明它的类之外的类关联的方法
* 1、扩展方法必须声明为static
* 2、扩展方法声明所在的类也必须声明为static
* 3、扩展方法必须包含关键字this 作为他的第一个参数类型,并在后面跟着它扩展的类的名称
*/
namespace ExtendMethod
{
sealed class MyData
{
private double D1, D2, D3;
public MyData(double d1, double d2, double d3)
{
D1 = d1; D2 = d2; D3 = d3;
}
public double Sum()
{
return D1 + D2 + D3;
}
}
static class ExtendMyData
{
public static double Average(this MyData md)//扩展类MyData的方法
{
return md.Sum()/3;
}
}
static class ExtendMyData1
{
public static double Average( MyData md)//非扩展类MyData的方法
{
return md.Sum() / 3;
}
}
class Program
{
static void Main(string[] args)
{
MyData md = new MyData(3, 4, 5);
Console.WriteLine("Sum: {0}",md.Sum());
Console.WriteLine("扩展方法md.Avrage: {0}", md.Average());
Console.WriteLine("非扩展方法ExtendMyData1.Average:{0}",ExtendMyData1.Average(md));
Console.ReadKey();
}
}
}