1.重载操作符
C#提供operator 关键字来允许自定义类型对内建操作符做出不同的反映,Operator关键字只能用在静态方法上。
[],() 操作符不能被重载。
伪代码:
public class Point
{
public static Point operator + (Point p1,int number)
{
return new Point(p1.x+number);
}
}
Point myPoint=new Point();
myPoint=myPoint+10;
重载操作符通常仅在构建实用工具类型时才使用,字符串、点、矩形等都是很好的选择。使用操作符会使开发人员更难理解该类型的功能,只在需要的时候才使用。
2.扩展方法
当我们写了一个类,里面字段,方法什么都写好了,然后经过编译器编译进入.net程序集,如果还需为这个类添加、修改新方法时,我们必须 修改完毕后重新编译进.net程序集内,这样做是不是很不灵活。
在.net 3.5 中引入扩展方法的概念,可以对已编译的(类,结构,接口) 和 对即将编译的类型,不需要直接更改的情况下,获得功能上的扩展。使用这个新特性 可以在不修改 原有(类,结构,接口)定义时,添加新功能,同时这些方法将独立分开存放。
*注:扩展方法不会真正的改变编译后的代码!其实它只在当前应用程序的上下文中为类型添加新成员。
扩展方法的定义:
1.扩展方法必须定义在静态类里的静态方法中。
2.所有的扩展方法的第一个参数必须使用this作为参数
3.每一个扩展方法只可以被内存中正确的实例调用
public static Class ExtensionMethodDemo
{
public static void DisplayMethod(this Object obj)
{
Console.WriteLine(obj.GetType().Name)
}
}
private static void Main(string[] args)
{
int myInt=1000;
//实例调用扩展方法
myInt.DisplayMethod();
//静态调用扩展方法
ExtensionMethodDemo.DisplayMethod(myInt);
}
使用扩展方法扩展接口
interface IOperation
{
int Add(int x,int y);
}
Class MyCalc:IOperation
{
public int Add(int x,int y)
{
return x+y;
}
}
这时我们为接口添加一个新的Sub()方法。
static Class MathExtensions
{
public static int Sub(this IOperation operation,int x,int y)
{
return x-y;
}
}
MyCalc myCalc=new MyCalc();
Console.WriteLine(myCalc.Add(1,2).ToString());
//新添加的接口方法
Console.WriteLine(myCalc.Sub(1,2).ToString());