C#语言初级入门介绍_基础应用

 
本文的目的在于为尚未接触过C#的程序员介绍这种编程语言。不论你以前是否用过C/C++或者Java,都可以从本文开始学习C#。本文的唯一假定是你具有某种类型的编程知识(如具有面向对象编程的经验则更好,但并非必须),并拥有某种类型的C#编译器。
最简单的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 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.

时间: 2024-09-20 23:55:11

C#语言初级入门介绍_基础应用的相关文章

JavaScript语言核心数据类型和变量使用介绍_基础知识

任何的编程语言都有自己的语言核心,和众多编程语言一样,JavaScript也有自己语言的核心.语言的核心部分一般被称之为JavaScript最为基础的部分.正所谓万事开头难,学习JavaScript也是一个道理,也有句古话说得好,好的开始是成功的一半.了解并学好JavaScript的语言核心部分是JavaScript学习道路上非常良好的开始. 下面是一段代码,主要介绍了JavaScript的数据类型和变量: 复制代码 代码如下: //在script标签中,所有//后面的内容都称之为注释 //注释

C#语言初级入门(1)

导读 C#是Microsoft开发的一种新语言,它和C/C++一样强大,和Java一样提供丰富的网络编程支持和自动内存管理,和VB一样简单易用.本文的目的是为尚未接触过C#的程序员介绍这种编程语言,是一个基础的入门教程.作者:仙人掌工作室2001-02-20 原文出处:http://journal.iftech.com/articles/0011_joey_CSharp/ C#读作"C sharp",它是Microsoft开发的一种新语言,结合了C/C++的强大功能和Visual Ba

JavaScript的RequireJS库入门指南_基础知识

 简介 如今最常用的JavaScript库之一是RequireJS.最近我参与的每个项目,都用到了RequireJS,或者是我向它们推荐了增加RequireJS.在这篇文章中,我将描述RequireJS是什么,以及它的一些基础场景. 异步模块定义(AMD) 谈起RequireJS,你无法绕过提及JavaScript模块是什么,以及AMD是什么. JavaScript模块只是遵循SRP(Single Responsibility Principle单一职责原则)的代码段,它暴露了一个公开的API.

什么是HTML相关介绍_基础教程

什么是HTML? 简单点说:HTML是用来做网页的.它很简单,在接下来的1~2分钟之内你就会跟着我用HTML做一个简单的网页. 复杂点说:HTML(HyperTextMarkupLanguage的缩写),即超文本链接标记语言.它是在互联网发布超文本文件(通常所说的网页)的通用语言. 什么是XHTML?更先进难懂的技术? 简单点说:X是吓唬人的,其实XHTML就是严谨而准确的HTML.如果说HTML是汉语,那么XHTML就是标准普通话.对于现在才刚刚开始学习网页设计的朋友,直接学习XHTML是最佳

Javascript数组Array基础介绍_基础知识

Javascript,一门神奇的语言,它的数组也同样独特.我们要去其糟粕,取其精华,把常用的最优实践总结出来.如有错误,请指出. javascript数组是一种类数组的对象,拥有对象的特性.当属性名是小而连续的整数时,应该使用数组,否则,使用对象. 数组来源 所有的数组都是Array构造出来的,我们来测试一下constructor这个属性. var arr = []; arr.constructor === Array; // true arr.constructor === Array.pro

HTML 30分钟入门教程_基础教程

HTML 30分钟入门教程 作者:deerchao 来源:unibetter大学生社区 转载请注明来源 本文目标 30分钟内让你明白HTML是什么,并对它有一些基本的了解.一旦入门后,你可以从网上找到更多更详细的资料来继续学习. 什么是HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,它规定了自己的语法规则,用来表示比"文本"更丰富的意义,比如图片,表格,链接等.浏览器(IE,FireFox等)软件知道HTML语言的语法,可以用来查

JavaScript之引用类型介绍_基础知识

Object类型 Object类型是JavaScript中使用最多的一种类型.虽然Object的实例不具备多少功能,但对于在应用程序中存储和传输数据而言,它确实是非常理想的选择. 创建Object实例的方式有两种,第一种是使用new操作符后跟Object构造函数. 复制代码 代码如下: var person = new Object(); person.name = "tt"; person.age = 12; 另一种方式是使用对象字面量表示法. 复制代码 代码如下: var pers

Javascript模块化编程(三)require.js的用法及功能介绍_基础知识

这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js.  一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代码,相信很多人都见过. 复制代码 代码如下: <script src="1.js"></script> &l

perl 基本语法介绍_基础教程

一.数据类型(Data type): Perl 的数据类型大致分为四种:Scalar(变量).Scalar Array(数组).Hash Array(散列).References(指针),看起来虽少但用起来却绰绰有余.尤其在写Perl程序时可以不必事先宣告变量,这一点对刚学程序语言的人甚为方便,不过为了以后程序除错和维护方便,我建议你还是养成事先声明变量的习惯比较好. 1 Scalar(纯量变量): 纯量变量是Perl里最基本的一种数据型态,它可以代表一个字符.字符串.整数.甚至浮点数,而Per