现在的位置: 首页 > 综合 > 正文

c#学习笔记(1)

2012年06月26日 ⁄ 综合 ⁄ 共 3454字 ⁄ 字号 评论关闭

 

1          基本语法的学习

与法学习主要包含了以下几个方面:

(1)       基本的数据类型;

(2)       字符串;

(3)       控制语句;

(4)       c#特殊的关键字;

(5)       异常处理机制;

1.1         基本的数据类型

比较特殊的几个类型有:decimal;非齐整数组;

定义常量的方式:

1)常量

public const double gravitationalConstant = 6.673e-11;

不要和直接量混合了。

所谓的直接量其实就是直接给出一个数值,类似于汇编里头的立即数。

2)变量的作用域;

这点和delphi稍微有点不同,在c#中,变量的作用域是按照大括号来划分的,比如:

public static void main()

{

  int x=10;

  if (x==10)

  {

    int y=100;  //这个变量只在这个if语句内部有效

}

}

3)类型转换

类型转换主要分为:自动类型转换和强制类型转换。

强制类型转换采用和java一样的方式;

int I=(int)(10/3);

也就是这个类型一定要用括号括起来。

自动类型转换则必须满足两个条件:格式兼容;目标类型的取值范围大于源类型。

1.2         数组

数组,c#中的数组是作为对象来实现的,所有具备了许多优点

数组的定义格式如下:

int[] testArray = new int[10];

数组可以在创建的时候初始化;

int[] nums = {100,101,102,103,104,105,106,108,109};

等同于

int[] nums = new int[] {100,101,102,103,104,105,106,108,109};

还等同于

int[] nums = new int[10] {100,101,102,103,104,105,106,108,109};

 

多维数组的声明,感觉有点怪异:

int[,] Two = new int[3,4];

int[,,] Three = new int[3,4,5];

 

非齐整数组;就是允许每一维的长度不同;

声明的格式如下:

int[][] jagged = new int[3][];

jagged[0] = new int[3];

jagged[1] = new int[4];

jagged[2] = new int[5];

这样的格式我好像也在java里头看到过,不过有点不确定了。

 

数组的length属性;

这里又分为一般的数组和非齐整数组,非齐整数组其实是数组的数组;

 

foreach循环;

在循环的过程中,迭代变量是只读的,因为不能通过迭代变量来改变数组的内容。

使用方法如下:

int[] temp = {3,4,5} ;

foreach(int x in temp)

{

  Console.WriteLine(“temp[i] is : {0}”,x);

}

1.3         字符串

字符串的格式化输出;

Console.WriteLine(“My Name is {0}”,”Yangguichun”);

c#中,字符串并不像在其他的语言中一样,是字符的数组,它是对象。我记得java中的字符串也是对象。毫无疑问,c#学的是java的那一套,因为将字符串作为对象在java中已经被验证是可行的,所以为什么不用呢。既然学习的是java的那一套,我估计java中给字符串提供的那一套方法在这里也是有的。

 

虽然字符串不是字符的数组,但是字符串还是允许使用如下的形式;

string s =” this is a string”;

Console.WriteLine(s[0]);  //将输出t

不过却有点例外,就是不能够通过下标来给字符串赋值。因为据说一个字符串一旦创建,就不能修改了,是个常量。

 

字符串还允许使用==!=,因为字符串类重载了这两个运算符。其他的运算符则和一般的应用一样,比较的是引用。

 

字符串一旦创建之后是不可改变的,如果要使用可改变的字符串,那么可以使用System.Text中的StringBuilder类。

 

switch中可以使用字符串,这是所学过的其他语言中都不具备的功能,这个功能很棒。

 

 

2          面向对象特性的学习

面向对象特性的学习主要包含以下几个方面:

(1)       接口;

(2)       虚方法;

(3)       面向对象方面的特殊的关键字;

2.1         类、对象和方法

2.1.1          重载

首先来看一下重载,c#中的重载和delphi也有些不同,首先它并不需要overload关键字;其次一般方法的重载和构造函数的重载有所不同,重载的构造函数中的一个要调用另外一个的方法是:

  class TestConstructor

  {

    public TestConstructor()

    {

      Console.WriteLine("Constructor 1");

    }

    public TestConstructor(string name):this()

    {

     

      Console.WriteLine("Constructor 2 "+ name );

    }

}

而一般函数的方式则和delphi的相似。

  class TestConstructor

  {

    public TestConstructor()

    {

      Console.WriteLine("Constructor 1");

    }

    public void TestOverload()

    {

      Console.WriteLine("overload 1");

    }

    public void TestOverload( string name )

    {

      Console.WriteLine( " before " );

      TestOverload();

      Console.WriteLine( " after " );

    }

    public static void Main()

    {

      TestConstructor test = new TestConstructor("3");

      test.TestOverload("test");

    }

  }

则输出为:

before

Overload 1

after

2.1.2          refout关键字。

这两个关键字和delphivarout关键字相似,refvar唯一的不同在于:如果某个方法的参数有ref,那么在调用该方法的时候传送进来的参数也要用ref来修饰。

此外,对象的因用也可以用ref来修饰。

2.1.3          可变元参数

1)一般函数的变元

有些类似于delphiformat函数的那个参数的声明方式。

在这里采用的声明方式为:

    public void TestParams(params int[] args)

    {

      for (int i = 0; i < args.Length; i++)

      {

        Console.WriteLine(args[i]);

      }

}

这里给出的只是int类型的情况,其实和delphi的format函数的参数还不完全一样,如果要在一个数组中兼容各种类型,那么就要采用如下的声明方式。

  class TestParams

  {

    public void Test(params object[] args)

    {

      for (int i = 0; i < args.Length; i++)

      {

        Console.WriteLine(args[i]);

      }

    }

  }

2Main函数的变元

这个变元和一般函数的变元有所不同,格式如下:

    public static void Main(string[] args)

    {

      for (int i = 0; i < args.Length; i++)

      {

        Console.WriteLine(args[i]);

      } 

    }

2.1.4          函数的返回类型可以是数组

以前我所学过的其他的语言的函数都无法返回数组,但是c#可以,因为在c#中,数组是作为对象来实现的。

    public int[] TestArray()

    {

      int[] result = new int[10];

      for (int i = 0; i < result.Length; i++)

      {

        result[i] = i;

      }

      return result;

【上篇】
【下篇】

抱歉!评论已关闭.