C#教程语法
C#语法参考实例
入门很值得看一下
1.1 Hello, world
规范的“Hello,World”程序可以按照下面例子编写:
using System;
class Hello
{
static void Main() {
Console.WriteLine("Hello, world");
}
}
C#程序的源代通常存储在一个或多个扩展名为.cs的文件中,例如hello.cs。如果使用Visual Studio提供的命令行编译器,这样的程序可以用命令行命令来编译
csc hello.cs
这样就会生成一个名为hello.exe的可执行程序。程序的输出如下:
Hello, world
下面对这个程序进行详细的研究:
• 使用System;指令涉及到一个名称空间(namespace)叫作System,这是在Microsoft .NET类库中提供的。这个名称空间包括在Mian方法中使用的Console类。名称空间提供了一种用来组织一个类库的分层方法。使用“using”命令后,就可以无障碍地使用名称空间中的各种类型成员。“Hello,world”程序中使用的Console.WriteLine是System.Console.WriteLine的简写。
• Main方法是类Hello中的一个成员,它有static的说明符,所以它是类Hello中的一个方法而不是此类中的实例。
• 对于一个应用程序的主入口点-称开始执行的方法-通常是一个称为Main的静态方法。
• “Hello,world”的输出是通过使用类库产生的。语言本身并没有提供类库。作为替代,它使用一个通用类库,这个类库也可以被诸如Visual Basic和Visual C++的语言所使用。
对于C和C++开发者来说,会有兴趣知道对一些没有出现在“Hello,world”程序的东西。
• 程序没有把Main设为全局方法。在全局级别上不支持方法和变量;这些元素通常包含在类型声明当中(例如,类或结构的声明)。
• 程序中不使用“::”或“->”操作符。“::”不再是一个操作符,而“->”操作符也只是在程序的某个小片断中才会使用。操作符“.”用于符合名称,例如Console.WriteLine。
• 程序中不包括前向声明。因为声明的顺序不重要,所以不再需要前向声明。
• 程序中不使用#include关键字。程序中的从属关系是象征性的而不是字面上地。这个系统消除了在用不同语言编写的程序间的障碍。例如,Console类可以用另外一种语言编写。
1.2 类型
C#支持两种类型:数据类型和引用类型。数据类型包括一些简单类型(例如,char、int和float),枚举类型和结构类型。引用类型包括类类型、接口类型、代表(delegate)类型和数组类型。
数据类型和引用类型的区别在于,数据类型变量直接包含它们的数据,然而引用类型数据是存储对于对象的引用。对于引用类型,有可能两个变量引用相同的对象,因而可能出现对一个变量的操作影响到其它变量所引用对象的情况。对于数据类型,每个变量都有它们自己对数据的拷贝,所以不太可能因为对一个进行操作而影响到其它变量。
例子
using System;
class Class1
{
public int Value = 0;
}
class Test
{
static void Main() {
int val1 = 0;
int val2 = val1;
val2 = 123;
Class1 ref1 = new Class1();
Class1 ref2 = ref1;
ref2.Value = 123;
Console.WriteLine("Values: {0}, {1}", val1, val2);
Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);
}
}
从此例可以说明两者间的不同。程序的输出如下
Values: 0, 123
Refs: 123, 123
对局部变量val1的赋值没有影响到局部变量val2,因为两个局部变量都是数据类型(int类型),并且每个数据类型的局部变量都有它们自己的存储。与此相对的是,对于ref.Value的赋值ref.Value=123对ref1和ref2都有影响。
这两行
Console.WriteLine("Values: {0}, {1}", val1, val2);
Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);
值得更多的注释,因为它们可以让我们看到Console.WriteLine的一些字符串格式输出方式,这些实际上是使用了一些变量。第一个变量是一个字符串,它包含一些数字的占位符如{0}和{1}。每个占位符指向一个变量。占位符{0}指向第二个变量,占位符{1}指向第三个变量,等等。在输出被送到控制台前,这些占位符会被它们相对应的变量所替换。