您的位置:首页 > 编程语言 > C#

c#2.0的新功能(三):分部类、匿名方法等

2007-02-09 13:23 615 查看
一、分部类

1、定义

partial class A

{

string aa;

}

partial class A

{

void DoTest() {...}

}

其实就是

class A

{

string aa;

void DoTest() {...}

}

2、好处
(1). 可以把一个类的定义分部到多个文件中,所以可以让多个人同时操作一个类
(2). 把系统生成的代码和用户代码分开

3、注意点
(1). 只能定义类、结构和接口
(2). 所有的部分都必须加partial
(3). 每个部分中的类都必须有相同的访问符
(4). 如果一个为abstract或sealed,则所有的都是abstract或sealed
(5). 任何一个继承某个类,所有的都从该类继承。
(6). 各个部分可以实现不同接口,会实现所有定义的接口。
(7). 任何部分中定义的方法和字段可以被其他的部分中使用。
(8). 嵌套类型可以是分部的,它外面的类型是不是分部的是无所谓的。
(9). 最后属性会进行合并
(10). 只能放在class关键字前面
(11). 必须在同一个程序集中。
(12). 泛型的参数说明必须加到所有的后面,泛型参数必须一致。

二、迭代器
1、定义
可以用foreach方法,在2.0中不需要去实现IEnumerable 和 IEnumerator接口,只需要写方法返回IEnumerable接口。用yield return 某个值就可以了。

具体如下
public static IEnumerable power(int number , int exponent )
{
int counter = 0;
int result = 1;
while( counter++ < exponent)
{
result = result * number;
yield return result; //会保存当前位置,下次调用是会从该位置重新执行。
}
}

这样就可以了。

2、注意点
(1). 必须返回相同类型
(2). 可用作方法、运算符和get访问器
(3). yield break终止迭代
(4). 可以用多个迭代器
(5). 返回值必须是IEnumerable、IEnumerator、IEnumerable<T>、IEnumerator<T>接口。

三、可空类型
1、定义
其实是System.Nullable<T>的实例,可以设置空值。
如Nullable<Int32>:可以赋任何正确的类型和null
定义时可以用:Nullable<int> num = null或者int? num=null
可以把日期设置为null
2、注意点
(1). 用??来取到默认值int? x = null;int y = x??-1;
(2). 不允许使用嵌套的可空类型。Nullable<Nullable<int>>
(3). 取到值用Value,或者用GetValueOrDefault();

四、匿名方法
1、定义
命名方法
//public delegate void System.EventHandle(object sender , EventArgs e);
this.load += new System.EventHandle(this.Form1_Load);

public void Form1_Load(object sender , EventArgs e)
{
...
}

//匿名方法
this.load += delegate(object sender , EventArgs e)
{
...
};//分号不能少

2、注意点
(1). 不能使用out和ref的参数
(2). 不能用不安全代码

五、属性访问器可访问性
1、public string Something
{
get{return something;}
set{something=value;}
}

2、现在可以限制其中一个的可访问性
public string Something
{
get{return something;}
protected set{something=value;}
}
3、接口中的不能增加属性可访问性,所以可以在实现接口中的类进行添加。
4、当属性有两个访问器的的时候,可以限制其中一个。
5、属性访问器的可访问性必须比属性可访问性更严格
6、override必须与被重写的那个属性相同。

六、委托中的协变与逆变
1、协变,委托方法返回类型可以更具体
public delegate 父类 SomeFucntion();
public 子类 OtherFunction()
{
...
}

2、逆变
public delegate void SomeFucntion(子类);
public void OtherFunction(父类)
{
...
}

七、命名空间别名限定符
1、
class System{}

global::System.Console.WriteLine("Hello world!");//global 表示全局的

2、using colAlias = System.Collections;//别名

colAlias::Hashtable test = new colAlias::Hashtable();//colAlias.Hashtable
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: