您的位置:首页 > 编程语言 > C#

C#2005 .NET3.0高级编程学习笔记———C#基础

2008-01-29 08:39 525 查看
首先对C#的语法作几个解释。在C#中,与其他C风格的语言一样,大多数语句都以分号(;)结尾,语句可以写在多个代码行上,不需要使用续行字符。用花括号({……})把语句组合为块。单行注释一两个斜杠字符开头(//),多行注释一一个斜杠和一个星号(/*)开头,以一个星号和一个斜杠(*/)结尾。C#是区分大小写的。C#没有输入和输出关键字,而是完全依赖于.NET类。所有C#代码都必须包含在一个类中。每个C#可执行文件都必须有一个入口点——Main方法。该方法要么没有返回值void,要么返回一个整数(int)。

变量

在C#中声明变量使用下述语法:

datatype identifier;

例如: int i;

该语句声明int变量i,编译器不会让我们使用这个变量,除非我们用一个值初始化了该变量。但这个声明会在堆栈中给它分配4个字节,以保存其值。

还可以在一行代码中声明变量,并初始化它的值:


int i=10;

如果在一个语句中声明和初始化了多个变量,那么所有的变量都具有相同的数据类型:


int x=10,y=20;

声明不同类型的变量,需要使用单独的语句。


int x=10;


bool y=false;

变量的初始化

C#编译器需要用某个初始值对变量进行初始化,之后才能在操作中引用该变量。C#有两个方法可确保变量在使用前进行了初始化:

变量是类或结构中的字段,如果没有显式初始化,在默认状态下创建这些变量时,其值就是0。

方法的局部变量必须在代码中显式的初始化,之后才能在语句中使用它们的值。

例如,在C#中不能使用下面的语句:


public static int Main()




...{


int d;


Console.WriteLine(d);


return 0;


}

同样的规则也适用于引用类型。


Something objSomething;

上面的代码会在堆栈中创建Something类的一个实例。仅为Something对象创建一个引用,但没有指向任何对象。

在C#中实例化一个引用对象需要使用new关键字。


objSomething = new Something;

变量的作用域

变量的作用域是可以访问该变量的代码区域。

只要类在某个作用域内,其字段(也称为成员变量)也在该作用域内。

局部变量存在于表示声明该变量的块语句或方法结束的封闭花括号之前的作用域内。

在for,while或类似语句中声明的局部变量存在于该循环体内。

只要变量的作用域是程序的不同部分,就不会有问题。同名的局部变量不能在同一作用域内声明两次。

在某些情况下,可以区分名称相同、作用域相同的两个标识符。原因是C#在变量之间有一个基本的区分,它把声明为类型级的变量看做字段,而把在方法中声明的变量看做局部变量。常量


using System;


namespace ling.note




...{


class test




...{


static int i=20;


public static void Main()




...{


int i=10;


Console.WriteLine(i);


return;


}


}


}

即使在Main方法的作用域内声明了两个变量i,这段代码也会被编译。i被定义在类级上,在该类删除前是不会超出作用域的。在Main方法中声明的新变量i隐藏了同名的类级变量。如果要引用类级变量,可以使用语法类名.变量名,在对象的外部引用类的字段或结构。


using System;


namespace ling.note




...{


class test




...{


static int i=20;


public static void Main()




...{


int i=10;


Console.WriteLine(test.i);


return;


}


}


}

如果要访问一个实例字段(该字段属于类的一个特定实例),就需要使用this关键字。

在变量的前面加上关键字const,就可以把该变量指定为一个常量。只能把局部变量和字段声明为常量。


const int a=10;

常量必须在声明时初始化,指定其值后不能修改。

常量的值必须能在编译时用于计算。因此不能用从一个变量中提取出来的值来初始化常量。

常量总是静态的。不必也不允许在常量声明中包含修饰符static。

使用常量使程序更易于阅读,易于修改,更容易避免程序出现错误。

预定义数据类型

C#把数据类型分为值类型和引用类型。从概念上看其区别是值类型直接存储其值,而引用类型存储对值的引用。值类型存储在堆栈中,而引用类型存储在托管堆中。

假定已经定义了一个类test,test是一个引用类型,它有一个int类型的成员变量value:


test x,y;


x=new test();


x.value=10;


y=x;


y.value=20;

在执行这段代码后,只有一个test对象,x和y都指向包含该对象的内存位置。因为x和y是引用类型的变量,声明这两个变量只保留了一个引用,而不会实例化给定类型的对象。

如果变量是一个引用,就可以把其值设置为null,表示它不引用任何对象。

y=null;

在C#中,基本数据类型都是值类型(整型、浮点型、布尔型、字符型、结构)。大多数更复杂的数据类型都是引用类型(类、接口、数组、字符串)。如果要把自己的类型定义为值类型,就应把它声明为一个结构。

在C#中,object类型就是最终的父类型,所有内置类型和用户定义的类型都从它派生而来。可以使用object引用绑定任何子类型的对象。object类型执行许多一般用途的基本方法,包括Equals(),GetHashCode(),GetType()和ToString()。

C#有string关键字,在翻译为.NET类时,它就是System.String。有了它,像字符串连接和字符串复制这样的操作就很简单了:


string str1="Hello";


string str2="world";


string str3=str1+str2;

当把一个字符串变量赋给另一个字符串时,会得到内存中同一个字符串的两个引用。但是string与引用类型在常见的操作上有一些区别。例如修改其中一个字符串,就会创建一个全新的string对象,而另一个字符串没有改变。字符串字面量放在双引号中(“……”),如果试图把字符串放在单引号中,编译器就会把它当作char,从而引发错误。可以在字符串字面量前加上字符@,在这个字符后面的所有字符都看作是原来的含义,不会解释为转义字符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐