C# 一些小细节 初学版

来源:互联网 发布:广告优化师前景怎样 编辑:程序博客网 时间:2024/06/01 22:02

回过头总结了一些 C#的小细节

大纲:

1,C#基本

2,C#2.0 的泛型

3,C#3.0 的一系列语法糖

4,C#4.0 新特性

内容:

一,C# 基本

1,char与string是Unicode编码

2,C#类型分为 值类型 和 引用类型。 其中string是个讨厌的引用类型,但表现起来像值类型

3,类可包含 数据成员(字段、常量)和 函数成员(方法、属性、构造、析构、运算符、索引、事件)。类中的字段会自动初始化。

4,new不一定只在堆中为类分配内存,也可以用来为struct在栈上分配内存。比如DateTime是一个Struct,值类型。我们经常用new

5,参数的传递默认 就是 值传递,即不管值类型还是引用类型,都只传递副本,值类型的副本,和引用类型的副本,只不过引用类型的副本与原引用类型指向的是同一对象。
加上ref关键字,就变成引用传递了。

6,只是返回值不同,无法函数重载,因为返回值不是方法签名的一部分。

7,在C#中,静态static的唯一含义大概就是生命周期的不同。静态类成员生命周期超出实例。const包括有static的特性

8,类中可以有析构函数,GC在清理时会调用,但不知道什么时候会调用,即没有时效性。如果类中使用了很多资源(尤其是非托管资源:数据库,文件,网络等等),最好的策略是:显示的设置Dispose方法,但为了保证有些程序员忘记主动调用这个方法,所以还是要设置析构函数。

 捕获

9,所以是另一种形式的属性。单值到多值。索引可以重载。

10,get;set;加访问限制符,和 partial function 的 限制条件很多。

11,derived class 对 base class 的成员只能 重写 或者 覆盖(隐藏)。

12,覆盖:使用new关键字来显示声明我实在覆盖base class的成员,但并不意味着被覆盖的成员消失了,通过base调用还可以。

13,重写:virtual 与 override。支持连续继承时的重写。抽象函数(纯虚函数)的重写:abstract与override。

14,向上类型转换这种事就不说了。但要注意:覆盖不会引起向上类型转换,而重写可以。

15,类初始化时,应该初始化他的基类(隐式和显示=初始化列表)

16,结构可以有带参构造函数,无参构造函数已经被隐式的声明,无法替代

17,枚举的位标志,挺有用,相当于一组查询条件。

18,委托,一种函数指针的扩展,安全且具有一个相同签名相同返回类型的有序方法列表。如果列表中只有一个方法,则和函数指针很相像。

19,委托,是一种类型,很类一样。class A 与 delegate void MyDel(int x);

20,匿名方法、lambda表达式

21,事件:有点像某个函数的参数为函数指针,即程序员告诉这个函数执行那个动作,将函数指针传入,相当于注册一下。类比一下:某一类A定义事件(比如单击事件)成员,这时类B要告诉类A,当事件发生时,你应该执行哪些方法。这些方法以委托的形式赋予事件。类A叫做发布者(publisher),类B叫做订阅者(subscriber),类A中的事件成员叫做Event Member,而绑定到Event Member上的方法,叫做Event Handler。

22,从实现角度类比一下:在类中定义 private int a;再定义一属性 public int A{get;set;}。这里,事件就相当于属性A,而委托相当于a,事件对委托包装了一下,限制了其动作,只能+=与-=。

23,实现枚举的几种方法:实现IEnumerator或者IEnumerator<T>;实现IEnumerable或者IEnumerable<T>;只实现特定方法,不实现接口(提升性能)。建议使用泛型的接口

23,IEnumerator接口包含Current、MoveNext、Reset

让一个类可以用foreach,实现方式如下:

第一种:

捕获3

其中,“关于Enumeration的东西“内容为:

捕获

第二种:

捕获

当然,我还是十分怀疑foreach的效率。

二,C#2.0 泛型

1,标准事件委托EventHandler的泛化,EventHandler<MyEventArgs>

2,可空类型

三,C#3.0 语法糖

1,var变量是虚假的,最好不要用。

2,扩展方法

3,外部方法

4,lambda表达式

5,Linq

四,C#4.0 新特性

原创粉丝点击