现在的位置: 首页 > 综合 > 正文

C#与.NET4 高级程序设计—–语言特性 学习笔记

2013年12月26日 ⁄ 综合 ⁄ 共 1268字 ⁄ 字号 评论关闭

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());

 


 

 

 

 

 

抱歉!评论已关闭.