1,编译类文件:csc Class1.cs ? ? ? ?因编译后直接生成.exe文件,故可直接点击运行??? csc:开始–2008 – tools – 命令行提示
?2,C#的命名空间类似于java中的包的概念
?3,静态成员只能通过类名来访问,不能通过对象实例来访问
?4, 常量定义用const,而不是java中的final,并且const自动为static类型,因java的常量支持构造器初始化故不是自动static类型
?? ? ? 同时常量定义还可以用readonly,它同final一样,在运行时才确定其值,故它的值可以在构造函数中给值,即然如此,那么它就不再自动为
?? ? ? static类型
?? ? ? var : 代表任意类型,在方法内部使用如:var i = 10
?
?5,值类型
- ??java中的基型在c#称为值类型,如int,并且每个值类型实际上是一个struct,也拥有自己的方法!!! ?
- ??值类型分为有符号数与无符号数如int?( – 2 31 :2 31 – 1) ?而对应的无符号数uint(0:2 32 – 1)
- ??int 与 char的转换要强制执行,而不再是默认
- ??char大小为16位,故可以用来存一个汉字如:char c = ‘中’,同java。从8位上升到16位的原因是ASCII码表示不完所有字符,如汉字,故当出现符号与汉字在一起时,单个截取就不用再担心汉字被一分为二的问题。
- ??转义字符\ 但字符串中多时如路径就要写很多\\可用@:string filepath = @”C:’ProCSharp\First.cs”; \就会是\而不代表转义。
- ??switch可以用字符串,而java只能用int以下
?? ?using?string?=?System.String;?
?? ?using?sbyte?=?System.SByte;?
?? ?using?byte?=?System.Byte;?
?? ?using?short?=?System.Int16;?
?? ?using?ushort?=?System.UInt16;
?? ?using?int?=?System.Int32;?
?? ?using?uint?=?System.UInt32?
- ?ref :显示指明是引用传递,此时即使传来的基型,在方法中改变,实参也会改变
- ?out: 也是指明引用传递,不过实参可以不初始化传值,注意的是实参与形参前都要加上out前缀。
12,结构体与类的区别
struct PhoneCustomerStruct
{
public const string DayOfSendingBill = “Monday”;
public int CustomerID;
public string FirstName;
public string LastName;
public void show(){? }? //方法
}
创建:PhoneCustomerStruct pcs = new PhoneCustomerStruct();
与class相似,不同在于:1,结构体不能被继承,不能定义无参构造器
???????????????????????????????????? 2,结构体是值类型,类是引用类型。结构体存放在栈内,而类存放在堆中。
13,同java一样, C#只能继承自一个类,但可实现多个接口。重载时父类方法前要加virtual, 子类覆盖方法前加override, 而java所有父类方法都是virtual,故可不加此关键字。注:c#中若写上virtual, 子类同名方法前最好加上一个new, 代表这是此类型对象中的一个新的方法。
调用父类方法用base, 类似于java中的super.
14, 抽象类用abstract定义,抽象的类方法自动为virtual类型
15,在java中,final的类不能被继承,final的方法不能被覆盖,c#中用sealed, sealed的类不能被继承,sealed的方法不能被覆盖。其实若不想方法被覆盖的话将方法不声明为virtual即可。 同java一样,c#中的string也是只读的。
16, 修饰符:
? public ? 可以被外部成员调用 ?
? internal ? 可以在当前项目调用 ?
? protected ? 只能在被类的成员和该类的子类调用 ?
? private ? 只能在被类的成员调用
? protected internal ? :程序集及子类中调用都可。
17,c#类文件中可有多个public类,而java只能有一个,且此类的名称要与文件名相同,而C#无此限制。
18, c#的Interface与java的interface相同!接口名称通常以”I“开头, 实现接口但不用implements,而用”:‘, 接口之间继承也是用的冒号,即类继承,实现接口,接口之间的继承都用冒号。
19, C#的数组
- C#的数组都是对象,继承自Array类,故都拥有属性及方法,如Rank,数组的维数,equals等。 而java中的数组只有一个length属性。 ? ?? Array intArray1 = Array.CreateInstance(typeof(int), 5);? 等同于:int[] intArray1 = new int[5]; int[] intArray2 = (int[])intArray1; ????????
- 除一般数组外,C#支持不规则数组如:????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? int[][] jagged = new int[3][];
jagged[0] = new int[2] { 1, 2 };
jagged[1] = new int[6] { 3, 4, 5, 6, 7, 8 };
jagged[2] = new int[3] { 9, 10, 11 };