博文

C# 程序员参考--数组教程三(2006-09-03 18:07:00)

摘要:本教程展示属性是如何成为 C# 编程语言必不可少的一个组成部分的。它阐释如何声明和使用属性。教程 此教程包括两个示例。第一个示例展示如何声明和使用读/写属性。第二个示例演示抽象属性并展示如何在子类中重写这些属性。 示例 1 本示例展示一个 Person 类,它有两个属性:Name (string) 和 Age (int)。两个属性都是读/写属性。// person.cs using System; class Person { private string myName ="N/A"; private int myAge = 0; // Declare a Name property of type string: public string Name { get { return myName; } set { myName = value; } } // Declare an Age property of type int: public int Age { get { return myAge; } set { myAge = value; } } public override string ToString() { return "Name = " + Name + ", Age = " + Age; } public static void Main() { Console.WriteLine("Simple Properties"); // Create a new Person object: Person person = new Person(); ......

阅读全文(1658) | 评论:0

C# 程序员参考--数组教程三(2006-09-03 18:07:00)

摘要:多维数组     int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };     string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };    可省略数组的大小,如下所示:      int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };     string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} };    如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:      int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };     string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} };交错的数组(数组的数组)    可以像下例所示那样初始化交错的数组:      int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };    可省略第一个数组的大小,如下所示:      int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };    -或-      int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };    请注意,对于交错数组的元素没有初始化语法。访问数组成员    访问数组成员可以直接进行,类似于在 C/C++ 中访问数组成员。例如,下面的代码创建一个名为 numbers 的数组,然后向该数组的第五个元素赋以 5:      int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};     numbers[4] = 5;    下面的代码声明一个多维数组,并向位于 [1, 1] 的成员赋以 5:      int[,] num......

阅读全文(1308) | 评论:0

C# 程序员参考--数组教程二(2006-09-03 18:06:00)

摘要:示例    下面是一个完整的 C# 程序,它声明并实例化上面所讨论的数组。    // arrays.cs    using System;    class DeclareArraysSample    {      public static void Main()      {         // Single-dimensional array         int[] numbers = new int[5];          // Multidimensional array         string[,] names = new string[5,4];          // Array-of-arrays (jagged array)         byte[][] scores = new byte[5][];          // Create the jagged array         for (int i = 0; i < scores.Length; i++)         {            scores[i] = new byte[i+3];         }          // Print length of each row         for (int i = 0; i < scores.Length; i++)         {            Console.WriteLine("Length of row {0} is {1}", i, scores[i].Length);         }       }     }输出    Length of row 0 is 3    Length of row 1 is 4    Length of row 2 is 5    Length of row 3 is 6    Length of row 4 is 7初始化数组    C# 通过将初始值括在大括号 ({}) 内为在声明时初始化数组提供了简单而直接了当的方法。下面的示例展示初始化不同类型的数组的各种方法。     注意 如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将......

阅读全文(1433) | 评论:0

C# 程序员参考--数组教程(2006-09-03 18:05:00)

摘要: 本教程描述数组并展示它们在 C# 中的工作方式。 教程    本教程分为下述几节:     1.数组概述     2.声明数组     3.初始化数组     4.访问数组成员     5.数组是对象     6.对数组使用 foreach数组概述    C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起注意。     声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。    int[] table; // not int table[];     另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。    int[] numbers; // declare numbers as an int array of any size    numbers = new int[10]; // numbers is a 10-element array    numbers = new int[20]; // now it's a 20-element array 声明数组    C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组:     一维数组:     int[] numbers;    多维数组:    string[,] names;    数组的数组(交错的):    byte[][] scores;    声明数组(如上所示)并不实际创建它们。在 C# 中,数组是对象(本教程稍后讨论),必须进行实例化。下面的示例展示如何创建数组:     一维数组:    int[] numbers = new int[5];    多维数组:    string[,] names = new string[5,4];    数组的数组(交错的):    byte[][] scores = new byte[5][];    for (int x = 0; x < scores.Length; x++)     {      scores[x] = new......

阅读全文(1464) | 评论:0

C# 程序员参考--命令行参数教程(2006-09-03 18:05:00)

摘要:本教程展示如何访问命令行以及访问命令行参数数组的两种方法。 教程    下面的示例展示使用传递给应用程序的命令行参数的两种不同方法。 示例 1    本示例演示如何输出命令行参数。    // cmdline1.cs    // arguments: A B C    using System;     public class CommandLine    {       public static void Main(string[] args)       {          // The Length property is used to obtain the length of the array.           // Notice that Length is a read-only property:          Console.WriteLine("Number of command line parameters = {0}",             args.Length);          for(int i = 0; i < args.Length; i++)          {             Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);          }       }    }输出    使用如下所示的一些参数运行程序:cmdline1 A B C。     输出将为:    Number of command line parameters = 3    Arg[0] = [A]    Arg[1] = [B]    Arg[2] = [C]示例 2    循环访问数组的另一种方法是使用 foreach 语句,如本示例所示。foreach 语句可用于循环访问数组或“.NET Framework”集合类。它提供了一种简单的方法来循环访问集合。    // cmdline2.cs    // arguments: John Paul Mary    using System;     public class CommandLine2    {       public static void Main(string[] args)   ......

阅读全文(1419) | 评论:0

C# 程序员参考--Hello World(2006-09-03 18:05:00)

摘要: 本教程展示以 C# 编写的 Hello World 程序的几个版本。 教程    下面的示例展示编写 C#“Hello World”(世界你好)程序的几种不同方法。 示例 1     // Hello1.cs    public class Hello1    {      public static void Main()      {         System.Console.WriteLine("Hello, World!");      }    }输出:    Hello, World!代码讨论    每个 Main 方法都必须包含在一个类内(此处为 Hello1)。     System.Console 类包含一个 WriteLine 方法,可用于向控制台显示字符串。示例 2    为避免程序中到处都是完全限定的类,可以使用 using 指令,如下所示:    // Hello2.cs    using System;     public class Hello2    {      public static void Main()      {        Console.WriteLine("Hello, World!");      }    }输出    Hello, World!示例 3    如果需要访问传递到应用程序中的命令行参数,则只需更改 Main 方法的签名以包括这些参数,如下所示。本示例对命令行参数进行计数并显示这些参数。    // Hello3.cs    // arguments: A B C D    using System;     public class Hello3    {      public static void Main(string[] args)      {           Console.WriteLine("Hello, World!");         Console.WriteLine("You entered the following {0} command line arguments:",             args.Length );         for (int i=0; i < args.Length; i++)         {   ......

阅读全文(1452) | 评论:0

C#语言初级入门(4)(2006-09-03 18:02:00)

摘要:我们创建的第一个类是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,将得到如下输出: 圆的颜色......

阅读全文(1521) | 评论:0

C#语言初级入门(3)(2006-09-03 18:01:00)

摘要:在这最后一个例子中,我们来看看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 ...略...*/ publ......

阅读全文(1440) | 评论:0

C#语言初级入门(2)(2006-09-03 18:00:00)

摘要:下面这个例子示范如何创建和使用用户定义的类以及如何创建动态链接库。利用文本编辑器创建两个文件。第一个是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) ......

阅读全文(1203) | 评论:0

C#语言初级入门(1)(2006-09-03 18:00:00)

摘要:导读   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 Basic的易用性。从最初的语言规范即可看出,C#无论在语法、丰富的Web开发支持还是自动化的内存管理上都和Java非常相似。因此,如果你曾经用过C++或者Java,再来学习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方法,它是程序执行的起点和终点。另外还请注意,He......

阅读全文(1352) | 评论:0