Posts Tagged ‘

星期四 十一月 26, 2009 20:18

csharp对象和类的学习笔记

如左图所示(点击查看大图),首先这一章需要理清的一对关系是,结构和类。这里尤其需要说明的是:

虽然结构本身不支持继承,但隐藏在他背后的还是有一条鲜为人知的继承链:Struct继承于System.ValueType,而System.ValueType继承与System.Object。除此“一脉相传”之外,你不允许给他指定任何基类,也不允许从任何结构继承点什么。在我看来,这样的框架设计也正好符合了“万事万物皆对象”的原则。
结构的默认构造函数会将其申明的字段初始化为标准的默认值,直接对字段进行赋值初始化会遭到编译器的拒绝。但,重载构造函数可以绕过这个限制。(c# professional 2008 P155 Constructors for Structs在这一点上貌似提的有些问题)

在我早先的知识结构中,编程这块主要是C和Java。所以对于下面提到的一些问题会有点陌生:
函数成员->方法->传递参数->out关键字。与之相对的有一个ref关键字。ref挺好理解的,就是按引用传递,貌似c中的按地址传递参数。c#中,无论是值传递,还是引用类型传递,都需要先进行初始化。但真正在编程的过程中,初始化的数据往往是不重要的,甚至有的时候函数就没用过那些被初始化的数据,自然的不论是客户还是programer都希望看到的是计算后的那些amazing的,有意义的符号。out关键字,使得程序员能够摆脱这一初始化的僵局,当在方法参数中申明一个out变量时,编译器自动对其进行初始化,该变量通过引用传送。另外,在函数体内,如果未对out参数分配一个值的话,那编译器是不会通过验证的。当然,在调用该方法时,也需要继续指明out关键字。
函数成员->方法->方法重载(帅哥说咱这个阶段暂时只用记住2点:)

两个方法不能仅仅只在返回类型上有区别。
两个方法不能仅仅只在参数申明为out还是ref来区别。

函数成员->构造函数
有一个默默奉献的默认构造函数,不论你是否重构构造函数,还是压根没有动手描述它,它总是会隐式的自动调用,并为我们将字段初始化为标准的默认值,其功能也仅限于此。不过,下述情况是个意外。
把构造函数private化(也就是传说中的对象实例化的类代理),直接实例化是不可能实现的,因为在外部,new是没有办法使用的。一般来说,这样做是为了:

作为储存静态成员或属性的容器。
仅通过调用某个静态函数成员来实例化(可以保证在程序中只有一个该类的实例,需加锁)demo如下,注意观看getAtestClassInstance方法。

class Program
{
static void Main(string[] args)
{
testClass t = testClass.getAtestClassInstance(100);
[...]

calendar

2010年八月
« 七    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近评论