C#语言初级入门

原创 2005年03月02日 10:42:00
最简单的C#程序

   首先我们来看标准的Hello World程序。用文本编辑器创建一个新文件HelloWorld.cs,把下面的代码放入这个文件:


// 第一个c#程序

class HelloWorld {
static void Main() {
System.Console.WriteLine("Hello World!");
}
}

   现在,在DOS命令窗口进入保存HelloWorld.cs的目录,然后执行:


csc HelloWorld.cs

   该命令编译源代码并生成HelloWorld.exe文件。运行这个执行文件就可以看到:


Hello World!

   下面我们来分析一下这个例子。第一行代码是一行注释,由“//”开始。和C/C++以及Java一样,“//”告诉编译器忽略该行直至结尾为止的内容。C#中的另外一种注释方法是块注释。块注释由“/*”开始,到“*/”结束。

   程序中第二个重要的地方是第四行Main()方法的声明(static void Mian(){)。每一个C#程序都包含一个Main方法,它是程序执行的起点和终点。另外还请注意,HelloWorld类的Main()方法定义成了静态(static)方法。程序的Main方法永远不会是全局的,这意味着Main方法必须包含在类里面,如本例中Main()是在类HelloWorld里面(Main方法也可以包含到结构里面,但一般它总是在类里面)。

   程序中最后一个关键的地方是向控制台输出文本的代码,即“System.Console.WriteLine("Hello World!");”。WriteLine是一个方法,定义于Console类。WriteLine()把文本输出到标准输出设备并换行。Console类包含在System名称空间(类的集合)里面。如果你想避免用“System.Console”的方式来指出Console类的全称,可以在文件的开头加上“using System;”这行代码,以后就可以直接写出“Console.WriteLine("Hello World!");”。

下面这个例子示范如何创建和使用用户定义的类以及如何创建动态链接库。利用文本编辑器创建两个文件。第一个是Apple.cs,内容如下:
public class Apple {

private string variety = "";

public Apple(string appleVariety) {
this.variety = appleVariety;
}

public void outputVariety() {
System.Console.WriteLine(variety);
}

}

   第二个文件是Example2.cs,内容如下:


class Example2 {

static void Main() {
Apple mac = new Apple("Macintosh ");
Apple gra = new Apple("Granny Smith");
Apple cor = new Apple("Cortland");
mac.outputVariety();
gra.outputVariety();
cor.outputVariety();
}
}

   首先,我们定义了一个新的用户定义类,名字为Apple。虽然Apple类并不一定要放到独立的文件中,但把每个类都放到自己独立的文件中是一个好的面向对象编程习惯,有助于简化组织和管理。我们为Apple类的声明加上了public修饰符(public class Apple),这样其他类就可以创建Apple类的实例。

   下一行代码定义了实例变量variety。使用了修饰符private之后,只有在Apple类的内部才可以直接访问variety变量。这是一种常见的面向对象编程习惯,称为封装。封装之后,对象的工作细节对于对象的用户来说就隐藏不可见了。你现在正使用的键盘就是封装在现实世界中一个很好的例子。我们并不完全了解键击如何发送到控制器(我们之中的大多数都不知道),但只要理解它的接口如何运作就可以了。例如我们知道,打开文本编辑器,按下键盘上的“&”键,“&”字符就会出现在屏幕上。如果每一个人都必须了解键盘的工作细节而不是只要了解它的接口,我们之中不会有很多人使用它。

   接下来的三行代码是:


public Apple(string appleVariety) {
this.variety = variety;
}

   这三行代码定义了Apple类的构造函数。类的构造函数类似一个描述如何创建类实例的蓝图。我们能够很容易地将构造函数和类里面的其他方法区分开来,因为构造函数总是和类具有相同的名字。在本例中,类Apple的构造函数有一个字符串参数,这个参数值随后被保存到实例变量variety。

   Apple类的最后一个方法是outputVariety()。这个方法为访问实例变量提供了接口,所以称为存取方法(Accessor Method)。

   下面我们来看Example2类。这个例子与前文例子的区别在于要创建并使用用户定义类Apple的实例。我们用new操作符创建了三个Apple类的实例。创建类的实例时,我们无需显式地调用类的构造函数,new操作符将自动为我们调用类的构造函数。创建了三个Apple类的对象之后,我们依次调用这三个对象的outputVariety方法,由outputVariety方法输出这三个对象里variety的值。

   下面我们来编译和运行这个例子。首先我们要把Apple类编译成动态链接库,命令如下:


csc /target:library Apple.cs

   /target:library表示不要创建执行文件,而是创建一个.dll文件(即动态链接库)。所以,上面的命令将生成一个Apple.dll文件。

   接下来我们编译Example2.cs,编译命令如下所示:


csc /reference:Apple.dll Example2.cs

   现在我们得到了执行文件Example2.exe。执行这个文件可以在控制台上看到如下输出:
Macintosh
Granny Smith
Cortland

在这最后一个例子中,我们来看看C#的抽象和多态性。首先我们来定义一下这两个新的术语。抽象(Abstract)通过从多个对象提取出公共部分并把它们并入单独的抽象类中实现。在本例中我们将创建一个抽象类Shape(形状)。每一个形状都拥有返回其颜色的方法,不论是正方形还是圆形、长方形,返回颜色的方法总是相同的,因此这个方法可以提取出来放入父类Shape。这样,如果我们有10个不同的形状需要有返回颜色的方法,现在只需在父类中创建一个方法。可以看到使用抽象使得代码更加简短。

   在面向对象编程领域中,多态性(Polymorphism)是对象或者方法根据类的不同而作出不同行为的能力。在下面这个例子中,抽象类Shape有一个getArea()方法,针对不同的形状(圆形、正方形或者长方形)它具有不同的功能。

   下面是代码:


public abstract class Shape {
protected string color;
public Shape(string color) {
this.color = color;
}
public string getColor() {
return color;
}
public abstract double getArea();
}

public class Circle : Shape {
private double radius;
public Circle(string color, double radius) : base(color) {
this.radius = radius;
}
public override double getArea() {
return System.Math.PI * radius * radius;
}
}

public class Square : Shape {
private double sideLen;
public Square(string color, double sideLen) : base(color) {
this.sideLen = sideLen;
}
public override double getArea() {
return sideLen * sideLen;
}
}

/*
public class Rectangle : Shape
...略...
*/

public class Example3
{
static void Main()
{
Shape myCircle = new Circle("orange", 3);
Shape myRectangle = new Rectangle("red", 8, 4);
Shape mySquare = new Square("green", 4);
System.Console.WriteLine("圆的颜色是" + myCircle.getColor()
+ "它的面积是" + myCircle.getArea() + ".");
System.Console.WriteLine("长方形的颜色是" + myRectangle.getColor()
+ "它的面积是" + myRectangle.getArea() + ".");
System.Console.WriteLine("正方形的颜色是" + mySquare.getColor()
+ "它的面积是" + mySquare.getArea() + ".");
}
}

我们创建的第一个类是Shape。这是一个抽象类,因为我们不想创建这个类的实例,我们要创建的是它的派生类的实例。我们从所有的形状(圆、长方形、正方形)提取出共同特征到Shape类。Shape类有一个实例变量color,它的变量声明中带有protected修饰符。protected修饰符表示这个变量只能在类的内部或者该类的派生类中访问。紧接这个变量声明的就是Shape类的构造函数和存取方法getColor(),这两个方法都没有什么新的东西。最后一个方法getArea()加上了abstract修饰符,这是因为每一种不同的形状都有不同的面积计算方法,因此这个方法必须由各种形状自己来定义。

   接下来的三个类Circle、Rectangle和Square都从Shape类派生,它们都具有Shape所描述的特征。这可以从它们的定义中看出来,它们的声明中都带有“public class:Shape {”,这个“: Shape”就表示当前的类从Shape类派生。由于这三个类都从Shape派生,它们自动拥有Shape中定义的所有public或者protected实例变量,即Circle、 Rectangle和Square包含了实例变量color。

   每一个Sharp的派生类都有自己的构造函数,负责调用父类Shape的构造函数设置公共的实例变量(color)以及设置自己特有的实例变量。例如“public Circle(string color, double radius) : base(color)”这个语句中,“: base(color)”就表示用参数color调用父类的构造函数。

   最后我们来看一下getArea()方法,它是一个多态性的示范。所有形状都有getArea()方法,但是根据对象是圆、长方形还是正方形,具体调用的方法也不同。

   要运行这个例子,先把所有文件保存到同一目录,然后执行下面的命令:


csc /target:library /out:Shapes.dll
Shapes.cs Circle.cs Rectangle.cs Square.cs

   然后执行:


csc /reference:Shapes.dll Example3.cs

   现在,如果我们运行Example3.exe,将得到如下输出:


圆的颜色是orange它的面积是28.274333882308138.
正方形的颜色是green它的面积是16.
长方形的颜色是red 它的面积是32.

C#语言初级入门(1)_C#教程

导读   C#是Microsoft开发的一种新语言,它和C/C++一样强大,和Java一样提供丰富的网络编程支持和自动内存管理,和VB一样简单易用。本文的目的是为尚未接触过C#的程序员介绍这种编程语言...
  • qw19840702
  • qw19840702
  • 2008年03月03日 02:46
  • 156

C#语言初级入门(4)_C#教程

我们创建的第一个类是Shape。这是一个抽象类,因为我们不想创建这个类的实例,我们要创建的是它的派生类的实例。我们从所有的形状(圆、长方形、正方形)提取出共同特征到Shape类。Shape类有一个实例...
  • qw19840702
  • qw19840702
  • 2008年03月03日 02:49
  • 143

C#语言初级入门(2)_C#教程

下面这个例子示范如何创建和使用用户定义的类以及如何创建动态链接库。利用文本编辑器创建两个文件。第一个是Apple.cs,内容如下: public class Apple {private string...
  • qw19840702
  • qw19840702
  • 2008年03月03日 02:50
  • 151

C#语言初级入门(3)_C#教程

在这最后一个例子中,我们来看看C#的抽象和多态性。首先我们来定义一下这两个新的术语。抽象(Abstract)通过从多个对象提取出公共部分并把它们并入单独的抽象类中实现。在本例中我们将创建一个抽象类Sh...
  • qw19840702
  • qw19840702
  • 2008年03月03日 02:49
  • 242

如何学习黑客技术?初级黑客入门速成学习法

要想学习黑客技术就得做好下苦心的准备,不是说你今天按照别人做好的动画跟着去做刷到了几个QB就说明你是个黑客了,你内心的喜悦如果可以唤醒对黑客技术的兴趣,那还是值得的 学习黑客技术很苦恼吗? 或许你...
  • likunlun1234
  • likunlun1234
  • 2015年01月14日 14:24
  • 861

C#初级入门之---读

                                                                                    ID             ...
  • zxstone
  • zxstone
  • 2008年07月14日 15:50
  • 386

hibernate环境搭建教程---【小白系列】0基础到熟练应用hibernate框架(一)

搭建hibernate环境
  • LawsonJin
  • LawsonJin
  • 2017年06月27日 16:58
  • 455

c#数据库连接初级入门

   strconn 是连接数据库的连接字符串“Server=“要连接数据库所在机器的IP地址”;uid=sa;pwd=;database=数据库名称” sqlcomm.ExecuteNonQuery...
  • liguanxin
  • liguanxin
  • 2007年06月23日 10:19
  • 312

C语言学习之路-由浅入深(快速掌握c基础)

1.第一个C程序:HelloWorld.c#include // java import xxx.xx.pack 引用函数的声明 #include main() // 程序的入...
  • qq_33750826
  • qq_33750826
  • 2016年11月22日 10:24
  • 4580

C# 2.0中泛型编程初级入门

在2005年底微软公司正式发布了C# 2.0,与C# 1.x相比,新版本增加了很多新特性,其中最重要的是对泛型的支持。通过泛型,我们可以定义类型安全的数据结构,而无需使用实际的数据类型。这能显著提高性...
  • ouyp0627
  • ouyp0627
  • 2007年06月18日 14:45
  • 333
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#语言初级入门
举报原因:
原因补充:

(最多只允许输入30个字)