从零开始学习C# 1

公司使用C#做开发,而以前在学校里写程序基本都是用的Java(第一个学习的编程语言,尽管教Java的老师饱受我们诟病,但语言本身却相当美妙),所以还是有许多不熟悉的地方,网上看了一些帖子,于是找到了3本书《C#入门经典》,《C#高级编程》和《CLR Via C#》,准备利用业余时间循序渐进得好好补补基础,也会把自己觉得重要或是疑惑的东西放上来,希望与大家一起讨论学习。那么就从《C#入门经典》开始,Let's go!

.NET Framework相关概念

基本没有搞清楚这是个什么东西,书上的定义是微软为开发应用程序而创建的一个富有革命性的平台,基本等于什么都没说=,=我的理解是:以前问一个程序猿你用什么开发语言,他可能会告诉你他用C/C++或者Java等,而现在微软搞了一个.NET,它由CLR(感觉类似于Java中的JRE),CTS等等一系列的东西组成,但是这个东西支持很多语言比如VB.NET,C++/CLI,以及专门为.NET设计的C#(只要CLR认识就可以了)

貌似这样可以很好的解决跨编程语言开发的问题。类似于Java,高级语言编译器先把对应的程序编译成中间语言,在.NET中是MSIL,然后由JIT负责编译成本机代码在CLR中执行。编译好的MSIL存储在程序集中,一般是个DLL或EXE文件,里面不但存着MSIL,还包括元数据,这可是个好东西,下个Reflector就直接可以看到源码了,安全性的话应该有第三方的工具可以加密的,但好像加密程度不会很高,总得让CLR认识吧= =。CLR还负责垃圾回收,这个和Java应该是一样了。

零碎的感想

建一个Windows窗体会出来两个文件,用partial关键字来表示是同一个类的不同部分,一个是设计器自动生成的代码,专注于界面显示,另一个是用户需要编辑的代码,专注于业务处理的逻辑。这个设计得很人性化,两者分开,让开发人员只关注业务逻辑就好,而且设计器也相当友好,记得以前用Eclipse开发Java的时候还专门要下SWT Designer的插件,居然还是收费的,而且也不是很好用,相比之下VS的设计器就相当好用啊!

#region #endregion折叠代码也很好用,一下就能对代码结构清晰明了

@加字符串就不用逐个转义,这个也是不错的功能,不知道java里面有没有,至少以前从来没有用过

namespace我觉得类似于Java里面的package提供唯一标示代码的方法,不过感觉上更加灵活一点,可以嵌套

C#中的switch语句,只有一个case可以执行,也就是说case之后必须跟一个流转,比如break,goto,return等。当然你可以编写如下的代码,表示满足几个case之中的任意一个,就执行相关代码:

SwitchSample
1 int i = 0;
2 switch(i)
3 {
4 case 0:
5 case 1:
6 //do something
7 break;
8 ...
9 }

checked unchecked关键字可以用于溢出检查,当然通过VS,你可以配置将checked或unchecked应用整个项目,默认是unchecked

foreach是一种简单而安全的遍历方式,只要实现IEnumerable就可以使用foreach来遍历了

C#里有多维数组,记得以前Java里面用的都是数组的数组,操作好像简单了,当然C#也有数组的数组。

方法的最后一个形参可以是参数数组,在前面加上params关键字就可以,这样做就好像可以输入任意多个该类型的实参,而在方法内部被当做一个数组来处理

ParamsSample
1 static void ParamsSample(params int[] array)
2 {
3 foreach (int i in array)
4 {
5 Console.WriteLine(i);
6 }
7 }

然后可以这样来调用:

Invoke
1 static void Main(string[] args)
2 {
3 ParamsSample(1, 2, 3);
4 }

ref关键字和out关键字,用于定义传入参数引用,也就是说传入的值会被方法改变,out关键字和ref关键字的区别是,不能把未赋值的变量传给ref,但可以传给out。另外而且传给out的值在方法执行时会丢失,换句话说,必须把out当做没有初始值来处理,并且在方法调用结束之前,必须给out赋值。

Ref_Out_Sample
 1 static void Main(string[] args)
2 {
3 int first = 1;
4 int second = 2;
5 ChangeValue(ref first,out second);
6 //现在first是10,second是20
7 }
8
9 static void ChangeValue(ref int first, out int second)
10 {
11 first *= 10;
12 //下面一句,不会通过编译,因为out参数second未赋值
13 //second *= 10;
14 second = 20;
15 }

嗯,目前就看了那么多,先这样吧,有空再看。第一次写博客园,文中如有错误或者您有什么想法,请不吝文字加以之处,谢谢~

posted @ 2011-09-24 17:11  晓胖  阅读(880)  评论(16)    收藏  举报