第三章 对象和类型
1、在vb、c、c++中 可以定义跟某个特定类完全不相关的全局函数,c#中不可以这样 ,必须跟类或者结构相关。不能像c++那样用public:块
把几个方法定义组合起来
2、c#中调用方法必须使用圆括号,vb6中有时用,有时不需要括号
3、值传递跟引用传递中特殊例子,由于字符串是不能改变的(如果改变就传建新字符串) 所以在方法调用中,对字符串的任何改变都不影响
原来的字符串。
4、out关键字是c#中新增的内容,vb和c++中没有对应的关键字,如果在方法体内没有给out参数分配一个值 ,那么该方法就不能编译
5、c#不支持可选参数(c++支持?)
6、重载,两个方法不能仅在返回类型上有区别 ,不能仅仅根据参数是ref或者out来区分。
7、在属性定义中省略get访问器,就可以创建只写属性,但是这会使得客户机代码的用户感到迷惑,一般这种情况用一个方法代替。
8、如果某个方法或属性的执行代码仅是调用另外一个方法,或者返回一个字段,那该方法和属性肯定是内联的,何处内联由clr决定,不能像c
++那样用inline来控制。
9、当类仅仅希望做某些静态成员的容器,永远不会被实例化;或者类仅通过调用某个静态方法类实例化(即对象实例化的类代理方法),可以
使用private构造函数。
10、c#可以给类编写无参数的静态构造函数,在c++和vb6中没有对应函数。c#中静态构造函数通常在第一次调用类成员之前执行。
11、静态构造函数没有定义访问修饰符,其他c#代码从不调用它,在加载类的时候由.net运行库调用它,同样静态构造函数不能带任何参数,一
个类也只能有一个静态构造函数。
12、c#构造函数初始化符可以包含对同一个类的另一个构造函数的调用,也可以包括对其基类构造函数的调用,初始化符中不能有多于一个的
调用。
13、在构造函数中没有给readonly赋值,它的值就是其数据类型的默认值,或者在声明时候给它的初始化值。
14、结构和类的区别:
结构是值类型,存内存或者内联,类引用类型,存堆中;
结构不支持继承(继承ValueType,提供了一些比object更适合结构的执行代码);
结构不允许替换其无参数构造函数,不能给结构字段赋初值(以此绕过无参数构造函数);
使用结构可以支持字段在内存中如何布局(StructLayout,StructLayout特性支持三种附加字段:CharSet、Pack、Size,
· CharSet定义在结构中的字符串成员在结构被传给DLL时的排列方式。可以是Unicode、Ansi或Auto。
默认为Auto,在WIN NT/2000/XP中表示字符串按照Unicode字符串进行排列,在WIN 95/98/Me中则表示按照ANSI字符串进行排列。
· Pack定义了结构的封装大小。可以是1、2、4、8、16、32、64、128或特殊值0。特殊值0表示当前操作平台默认的压缩大小。)
15、对于结构,变量的声明即为整个结构分配堆栈的空间,
16、对于结构当参数传递,可以用ref类提高性能,不过小心可以更改结构的 值。
17、如果在类中没有重写ToString(),该类将继承Object的执行方式,返回类的名称,可以自己重写,(String.Format())
18、Object的MemberwiseClone方法是受保护的,不能用于复制外部的对象,该方法不是virtual,不能重写之。
浙公网安备 33010602011771号