开发是一门技术,编程是一种艺术

游戏老手,编程新手
随笔 - 11, 文章 - 0, 评论 - 58, 引用 - 0
数据加载中……

初识C#

本以为可以有点时间来好好学习一下MFC,可是昨天和supervisor见了个面,发现必须要马上学习C#才行。之前听说C# = C++ + Java,花了两天时间看了c#的基本语法,发现果然如此,基本语法和c++没什么区别,代码结构上又是继承了Java(比如没有头文件,main()也放在了class里面等)。我看的是《Programming C# 3 0》 5th Edition,这书写得不错,不知道第五版有没有中文版(反正我搜索只有第四版的中文版),作者不愧是微软的人,开篇就把c#一顿吹,吹得让我这种刚学c#的人信心爆棚,觉得c#似乎无所不能,可以胜任各种平台,包办本地和web应用。哦,他推崇应该是.NET,不过既然c#是.NET的御用语言,当然也该推崇了。话说回来,Jesse的语言能力和写作水平还是毋庸置疑的,读起来还是十分轻松的(不像某Bruce),这可能也和本书定位有关(Beginning to Intermediate)。

 

写下几点个人觉得要记住的地方(或者说是比起c++有变化的地方):

 

1.用于if等语句的条件判断的表达式值只能为bool,不能像C++那样输入个int值进行判断了。这样也带来一个好处,就是像if(test = 20)这样的语句就无法通过编译了。相信把“==”写成“=”,每个人都基本干过吧,当然,你可以写成if(20 == test)来避免错误。不过,看来微软是不喜欢这样的,毕竟总是倒着写不符合直觉啊。

2.switch语句中的每个非空case必须有显式的跳转,否则程序不会自动进入到下一个case判断,而是编译错误。

3.当为class创建对象时,所有数据成员首先会被初始化为‘0’(或者null等),然后才是调用构造函数进行初始化。也就是说,在创建一个对象时,实际上数据成员被赋了两次值。我不知道为什么要设计成这样,也不知道作者提出这一点目的何在,因为调用构造函数之前的事情似乎完全是不受我们控制的。

4.构造函数要声明为public

5.this是一个引用而不是指针,不过就我目前的水平来看,实际上使用仍然是一回事。

6.静态成员只能通过类名来访问,若试图通过实例访问就会编译错误。

7.传递参数为引用时使用ref。比如function(int& inNumber),应该写成function(ref int inNumber)。并且在调用该函数是必须显式地指明:function(ref aNumber)。另一个修饰符out也能实现同样的功能,目前知道的区别就是:在用out传入的参数不要求有初始化值,不过必须在函数中给它赋值,否则就报错,而ref则不是必需要求被赋值。(网上搜了下,有这么一句:“Out更适合用在需要Return多个返回值的地方,而Ref则用在需要被调用的方法修改调用者的引用的时候”,先放在这)

8.不需要析构函数,因为有GC。不过,当你想自己处理非托管资源(unmanaged resources)时,还是需要的。不过你可以使用某些已经包装好的类(wrapper classes)来避免这种情况(大概是这么个意思吧,作者提到了FileStream,让我不禁想到Java里的FileStream)。

9.修饰符:readonly和const有些类似,通过博客园和csdn上的一些文章,大概记住的区别有:readonly不要求是static的;只能用于类的数据成员;只能用构造函数来初始化(在声明时的赋值没有意义)。放两篇文章以便以后学习:Kenney的《比较C#中的readonly与const》和Allen Lee的《readonly vs. const [C#]》。readonly可以用来声明那些在运行时才能确定的常量。

 

以上,基本就是看《Programming C# 3 0》一部前4章的一些记录。

posted on 2008-06-10 22:57 54sun 阅读(321) 评论(2)  编辑 收藏 引用 所属分类: C#

评论

# re: 初识C#  回复  更多评论   

第3点,.NET是托管的,内存管理器是在操作系统上再加了一层。为了保证每个成员的值都是正确的,至少引用被赋值成null还是很合理的。至于为什么要两次,估计还是安全起见。具体不详。
2008-06-11 16:38 | 陈梓瀚(vczh)

# re: 初识C#  回复  更多评论   

@陈梓瀚(vczh)

我是觉得,编译器只要检查构造函数,确保每个成员都有被赋值(没赋值的自动补上),就不需要在运行时进行二次赋值了。
或者说,相比于编译期间检查成员,在运行时使用两次赋值的开销反而要小一些?
2008-06-11 20:37 | 54sun

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理