基本语法1

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以下
6,迭代
?? ? ?迭代多了一个foreach,可以遍历字符串,数组,集合中全部元素,但在遍历时不能改变其值,若想改变用for 如:
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ??String s = “abd雪ad”;?? ? ? ? ?foreach( char d in s ){??Console.WriteLine(d);???}
7,String与string的区别:
?? ??string是c#中的类,String是Framework的类,如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作。
类似的还有:

?? ?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?

7, 输入输出 — Console
????? ?输入:Console.ReadLine();
?? ?? ?输出:Console.WriteLine(s);
?? ? ?格式化输出:Console.WriteLine(“{0} plus {1} equals {2}”, i, j, i + j); (类似于C中的printf)
8, 程序说明文档。java中用javadoc提取,在程序中用@author之类定义
?? ?c#以“///”开头,也要加一些关键字,如:
?? ? ? ?/// <summary>
?? ? ? ?/// The Add method allows us to add two integers.
?? ? ? ?/// </summary>
?? ? ? ?/// <returns> Result of the addition (int) </returns>
?? ? ? ?/// <param name=”x”> First number to add </param>
?? ? ? ?/// <param name=”y”> Second number to add </param>
?? ? ? ?public static int show(int x, int y) {
?? ? ? ? ? ?return 0;
?? ? ? ?}?
?? ? ? 提取时用:csc /doc Test.xml Test.cs ? ? ?生成的是XML文件,而不是HTML文件
9 函数传参
??默认是值传递。同java,不会改变传来的值,但能影响其所指的值,即所指的值改变,原来的实参也会发生相应变化。
  • ?ref :显示指明是引用传递,此时即使传来的基型,在方法中改变,实参也会改变
  • ?out: 也是指明引用传递,不过实参可以不初始化传值,注意的是实参与形参前都要加上out前缀。
10 生成属性:
???public string Account
?? ? ? ?{
?? ? ? ? ? ?get { return _Account; }
?? ? ? ? ? ?set { _Account = value; }
?? ? ? ?}
?或者:?public string Account{ get; set; }
11. 构造函数:与java不同的是多了一个static构造函数,在类第一次创建对象时由系统执行
?? ?static User()
?? ?{
?? ??? ?DateTime now = DateTime.Now;
???? ? ?if (now.DayOfWeek == DayOfWeek.Saturday
?? ?? ??? ??|| now.DayOfWeek == DayOfWeek.Sunday)
?? ?? ??BackColor = Color.Green;
?? ?? ??else
???? ? ?BackColor = Color.Red;
?? ?}
?因由系统调用,故在外部是不能访问的,可以再有一个无参的构造器!

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 };