11年8月底从android平台转为windows phone平台的开发负责人,以前从未学习过C#,由于在android平台上开发优秀,部门经理让我尝试一下;对以技术为主的我而言,积累的知识和项目经验也可以尝试一下多平台了,以开阔技术视野,对比学习,而且Java和C#都是基于虚拟机的语言,是一个不错的选择,学习过程做一个笔记:
《Beginning C# Objcets》不错的基础入门书籍:一个星期左右快速阅读,熟悉基本语法,将C#一些用法与Java做类比学习,如下:
1.char 为16位unicode类型;Java中尽量少用;
2.输出Consele.WriteLine("log")==System.out.println("log")
3.using == import;namespace==package;默认使用全局命名空间;System 命名空间类似Java中java.包的命名空间;4.string、int、bool为预定义的System命名空间中的类型String等类的别名;new String("str")方式不允许,写成String str = "str";@开头可以加入转义字符;可用数组[]操作;String类的==比较的是值,其它预定义类比较的是引用,建议使用Object.ReferenceEquals(obj1,obj2)比较的对象引用/句柄;obj1.Equals(obj2)在不同类中可以被override,根据不同类的定义不同,比较值;obj.ToString()简单返回对象类型的全名;5.static void Main()方法大写,方法命名大写字母开头,公有属性开头为大写字母;6.术语:句柄==引用;7.getter/setter方法可用property代替,public string Name { get{return name;} set {name = value} },Name将private属性的name首字母大写,参数名value由编译器传入;8.方法中局部变量声明后需初始化,不会被默认初始化;类字段默认初始化为0/null,由类构造器初始化;9.关联:学生 修 课程 链接:具体学生实例 修 具体课程实例10.继承:冒号 特殊化specialization :普遍化generalization 方法覆盖:virtual声明、override实现、base 方法隐藏--非virtual方法覆盖:new,返回类型可以不同;非多态,只调用base类中方法;abstract方法不能被隐藏;11.overload:不同方法签名12.Collections:基本类型int等也作为对象存储引用; 枚举器IEnumerator、MoveNext()、Current foreach(Object obj in objs) 可用[]的数组操作SortedList 有序列表;
Set 集合,不允许有重复对象引用Dictionary 字典,key-value; Hashtable13.多态==继承+override14.interface:方法不能有public、abstract15.static:只能通过类名+点调用,static属性命名私有的canel方式小写开头,方便写Property,公有的Pascal方式大写字母开头;static方法不能override,也不能abstract;16.const常量:默认为static,不能加static,声明时赋给可以编译时得到计算结果的值;17.csc /t:library dll.cs 生成dll.dll库; csc /t:exe exe.cs 生成exe可执行文件 csc exe.cs /r:dll.dll 动态链接dll库生成exe可执行文件exe /main 指定程序入口文件 /out 指定编译输出exe、dll文件名18.微软中间字节码语言MSIL==Java字节码 .NET公共运行时CLR==Java运行环境JRE虚拟机 .NET框架类库--FCL19.exception:C#编译器不强制进行异常处理;20.调用类中其它构造函数--:this(arg...)或者:base(arg...)21.typeof==instanceof22.元注解[obsolete] == @deprecated23.FileStream(filename, FileMode):字节流-->StreamReader.ReadLine()等方法缓冲读取;