VisualCshape示例.doc_第1页
VisualCshape示例.doc_第2页
VisualCshape示例.doc_第3页
VisualCshape示例.doc_第4页
VisualCshape示例.doc_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Visual C# 示例本节包括 C# 教程的示例摘要。每个摘要中都包含一些链接,这些链接允许在开发环境中打开示例并将示例源文件复制到硬盘上。示例说明Hello World说明 Hello World 应用程序。命令行参数说明简单的命令行处理;同时说明数组索引。数组说明如何使用数组。属性说明如何声明和使用属性;同时阐释抽象属性。库说明如何使用编译器选项从多个源文件来创建 DLL;同时也说明如何在其他程序中使用该库。版本控制通过关键字 override 和 new 的使用说明 C# 中的版本控制。集合类说明如何生成可与 foreach 语句一起使用的集合类。结构说明如何在 C# 中使用结构。索引器说明如何使用数组表示法来访问对象。索引属性说明如何实现使用索引属性的类。索引属性使您可以使用表示类似于数组的若干种不同事物的集合的类。 用户定义的转换说明如何定义用户定义的类型与其他类型之间的转换。运算符重载说明用户定义的类如何能够重载运算符。委托说明如何声明、映射和组合委托。事件说明如何在 C# 中使用事件。显式接口实现阐释如何显式实现接口成员。条件方法阐释条件方法,这种方法提供一种功能强大的机制,通过这种机制可以根据是否定义了某个符号来包括或省略方法调用。XML 文档说明如何使用 XML 将代码编入文档。平台调用说明如何从 C# 中调用平台调用(导出的 DLL 函数)。COM Interop 第一部分说明如何使用 C# 与 COM 对象交互操作。COM Interop 第二部分说明如何将 C# 服务器与 C+ COM 客户端程序一起使用。特性说明如何创建自定义属性类、如何在代码中使用这些类以及如何通过反射查询它们。安全性讨论 .NET Framework 安全并说明 C# 中的两种修改安全权限的方法:权限类和权限属性。线程处理说明各种线程活动,如创建和执行线程、同步线程、在线程间交互以及使用线程池等。不安全代码说明如何使用指针。OLE DB说明如何在 C# 中使用 Microsoft Access 数据库。它显示如何创建数据集并从数据库向该数据集添加表。Hello World 示例在 Visual Studio 内生成并运行示例生成并运行 Hello World 示例打开解决方案 (HelloWorld.sln)。在“解决方案资源管理器”中,右击 HelloWorld1 项目并单击“设为启动项目”。在“调试”菜单中,单击“开始执行(不调试)”。按任一键关闭“HelloWorld1”。在“解决方案资源管理器”中,右击 HelloWorld2 项目并单击“设为启动项目”。在“调试”菜单中,单击“开始执行(不调试)”。按任一键关闭“HelloWorld2”。在“解决方案资源管理器”中,右击 HelloWorld3 项目并单击“设为启动项目”。在“解决方案资源管理器”中,右击 HelloWorld3 项目并单击“属性”。打开“配置属性”文件夹并单击“调试”。在“命令行参数”属性中键入“A B C D”,然后单击“确定”。在“调试”菜单中,单击“开始执行(不调试)”。按任一键关闭“HelloWorld3”。在“解决方案资源管理器”中,右击 HelloWorld4 项目并单击“设为启动项目”。在“调试”菜单中,单击“开始执行(不调试)”。按任一键关闭“HelloWorld4”。从命令行生成并运行示例生成并运行 Hello World 示例使用“更改目录”命令转到“HelloWorld”目录。键入下列内容:cd HelloWorld1csc Hello1.csHello1键入下列内容:cd .HelloWorld2csc Hello2.csHello2键入下列内容:cd .HelloWorld3csc Hello3.csHello3 A B C D键入下列内容:cd .HelloWorld4csc Hello4.csHello4Hello World 教程请参见C# 教程本教程展示以 C# 编写的 Hello World 程序的几个版本。示例文件请参见 Hello World 示例以下载和生成本教程中讨论的示例文件。其他阅读材料C# 程序的常规结构Main1.1 开始3.3 声明教程下面的示例展示编写 C#“Hello World”(世界你好)程序的几种不同方法。示例 1/ Hello1.cspublic class Hello1 public static void Main() System.Console.WriteLine(Hello, World!); 输出Hello, World!代码讨论每个 Main 方法都必须包含在一个类内(此处为 Hello1)。System.Console 类包含一个 WriteLine 方法,可用于向控制台显示字符串。示例 2为避免程序中到处都是完全限定的类,可以使用 using 指令,如下所示:/ Hello2.csusing System;public class Hello2 public static void Main() Console.WriteLine(Hello, World!); 输出Hello, World!示例 3如果需要访问传递到应用程序中的命令行参数,则只需更改 Main 方法的签名以包括这些参数,如下所示。本示例对命令行参数进行计数并显示这些参数。/ Hello3.cs/ arguments: A B C Dusing 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+) Console.WriteLine(0, argsi); 输出Hello, World!You entered the following 4 command line arguments:ABCD示例 4若要返回返回代码,请更改 Main 方法的签名,如下所示:/ Hello4.csusing System;public class Hello4 public static int Main(string args) Console.WriteLine(Hello, World!); return 0; 输出Hello, World!“命令行参数”示例本示例说明如何访问命令行,并说明访问命令行参数数组的两种方法。该示例包含命令行参数教程的源代码。在 Visual Studio 内生成并运行示例生成并运行“命令行参数”示例打开解决方案 (CommandLine.sln)。在“解决方案资源管理器”中,右击“CmdLine1”项目并单击“设为启动项目”。在“解决方案资源管理器”中,右击项目并单击“属性”。打开“配置属性”文件夹并单击“调试”。在“命令行参数”属性中,键入命令行参数(请参见本教程中的示例),然后单击“确定”。在“调试”菜单中,单击“开始执行(不调试)”。重复前面用于 CmdLine2 的步骤。从命令行生成并运行示例生成并运行“命令行参数”示例使用“更改目录”命令转到“CmdLine1”目录。键入下列内容:csc cmdline1.cscmdline1 A B C使用“更改目录”命令转到“CmdLine2”目录。键入下列内容:csc cmdline2.cscmdline2 John Paul Mary命令行参数教程请参见C# 教程 | 集合类教程本教程展示如何访问命令行以及访问命令行参数数组的两种方法。示例文件请参见“命令行参数”示例以下载和生成本教程中讨论的示例文件。其他阅读材料Hello World! 的 C# 版foreach, inString.Length 属性教程下面的示例展示使用传递给应用程序的命令行参数的两种不同方法。示例 1本示例演示如何输出命令行参数。/ cmdline1.cs/ arguments: A B Cusing 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(Arg0 = 1, i, argsi); 输出使用如下所示的一些参数运行程序:cmdline1 A B C。输出将为:Number of command line parameters = 3Arg0 = AArg1 = BArg2 = C示例 2循环访问数组的另一种方法是使用 foreach 语句,如本示例所示。foreach 语句可用于循环访问数组或“.NET Framework”集合类。它提供了一种简单的方法来循环访问集合。/ cmdline2.cs/ arguments: John Paul Maryusing System;public class CommandLine2 public static void Main(string args) Console.WriteLine(Number of command line parameters = 0, args.Length); foreach(string s in args) Console.WriteLine(s); 输出使用如下所示的一些参数运行程序:cmdline2 John Paul Mary。输出将为:Number of command line parameters = 3JohnPaulMary“数组”示例本示例描述和说明在 C# 中数组是如何工作的。该示例包含数组教程的源代码。在 Visual Studio 内生成并运行示例生成并运行“数组”示例打开解决方案 (Arrays.sln)。在“调试”菜单中,单击“开始执行(不调试)”。从命令行生成并运行示例生成并运行“数组”示例在命令提示处键入以下内容:csc arrays.csarrays数组教程请参见C# 教程本教程描述数组并展示它们在 C# 中的工作方式。示例文件请参见“数组”示例以下载和生成本教程中讨论的示例文件。其他阅读材料 数组 12. 数组 foreach, in 集合类教程教程本教程分为下述几节: 数组概述 声明数组 初始化数组 访问数组成员 数组是对象 对数组使用 foreach数组概述C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起注意。声明数组时,方括号 () 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。int table; / not int table;另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。int numbers; / declare numbers as an int array of any sizenumbers = new int10; / numbers is a 10-element arraynumbers = new int20; / now its a 20-element array声明数组C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组:一维数组:int numbers;多维数组:string, names;数组的数组(交错的):byte scores;声明数组(如上所示)并不实际创建它们。在 C# 中,数组是对象(本教程稍后讨论),必须进行实例化。下面的示例展示如何创建数组:一维数组:int numbers = new int5;多维数组:string, names = new string5,4;数组的数组(交错的):byte scores = new byte5;for (int x = 0; x scores.Length; x+) scoresx = new byte4;还可以有更大的数组。例如,可以有三维的矩形数组:int, buttons = new int4,5,3;甚至可以将矩形数组和交错数组混合使用。例如,下面的代码声明了类型为 int 的二维数组的三维数组的一维数组。int, numbers;示例下面是一个完整的 C# 程序,它声明并实例化上面所讨论的数组。/ arrays.csusing System;class DeclareArraysSample public static void Main() / Single-dimensional array int numbers = new int5; / Multidimensional array string, names = new string5,4; / Array-of-arrays (jagged array) byte scores = new byte5; / Create the jagged array for (int i = 0; i scores.Length; i+) scoresi = new bytei+3; / Print length of each row for (int i = 0; i scores.Length; i+) Console.WriteLine(Length of row 0 is 1, i, scoresi.Length); 输出Length of row 0 is 3Length of row 1 is 4Length of row 2 is 5Length of row 3 is 6Length of row 4 is 7初始化数组C# 通过将初始值括在大括号 () 内为在声明时初始化数组提供了简单而直接了当的方法。下面的示例展示初始化不同类型的数组的各种方法。注意如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值 null。一维数组int numbers = new int5 1, 2, 3, 4, 5;string names = new string3 Matt, Joanne, Robert;可省略数组的大小,如下所示:int numbers = new int 1, 2, 3, 4, 5;string names = new string Matt, Joanne, Robert;如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:int numbers = 1, 2, 3, 4, 5;string names = Matt, Joanne, Robert;多维数组int, numbers = new int3, 2 1, 2, 3, 4, 5, 6 ;string, siblings = new string2, 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 int2 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;numbers4 = 5;下面的代码声明一个多维数组,并向位于 1, 1 的成员赋以 5:int, numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;numbers1, 1 = 5;下面声明一个一维交错数组,它包含两个元素。第一个元素是两个整数的数组,第二个元素是三个整数的数组:int numbers = new int new int 1, 2, new int 3, 4, 5;下面的语句向第一个数组的第一个元素赋以 58,向第二个数组的第二个元素赋以 667:numbers00 = 58;numbers11 = 667;数组是对象在 C# 中,数组实际上是对象。System.Array 是所有数组类型的抽象基类型。可以使用 System.Array 具有的属性以及其他类成员。这种用法的一个示例是使用“长度”(Length) 属性获取数组的长度。下面的代码将 numbers 数组的长度(为 5)赋给名为 LengthOfNumbers 的变量:int numbers = 1, 2, 3, 4, 5;int LengthOfNumbers = numbers.Length;System.Array 类提供许多有用的其他方法/属性,如用于排序、搜索和复制数组的方法。对数组使用 foreachC# 还提供 foreach 语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,下面的代码创建一个名为 numbers 的数组,并用 foreach 语句循环访问该数组:int numbers = 4, 5, 6, 1, 2, 3, -2, -1, 0;foreach (int i in numbers) System.Console.WriteLine(i);由于有了多维数组,可以使用相同方法来循环访问元素,例如:int, numbers = new int3, 2 9, 99, 3, 33, 5, 55;foreach(int i in numbers) Console.Write(0 , i);该示例的输出为:9 99 3 33 5 55不过,由于有了多维数组,使用嵌套 for 循环将使您可以更好地控制数组元素。“属性”示例本示例说明属性为何是 C# 编程语言必不可少的一个组成部分。它阐释如何声明和使用属性。该示例包含属性教程的源代码。在 Visual Studio 内生成并运行示例生成并运行“属性”示例打开解决方案 (Properties.sln)。在“解决方案资源管理器”中,右击“person”项目并单击“设为启动项目”。在“调试”菜单中,单击“开始执行(不调试)”。重复前面用于 shapetest 的步骤。从命令行生成并运行示例生成并运行“属性”示例使用“更改目录”命令转到“person”目录。键入下列内容:csc person.csperson使用“更改目录”命令转到“shapetest”目录。键入下列内容:csc abstractshape.cs shapes.cs shapetest.csshapetest属性教程请参见C# 教程本教程展示属性是如何成为 C# 编程语言必不可少的一个组成部分的。它阐释如何声明和使用属性。示例文件请参见“属性”示例以下载和生成本教程中讨论的示例文件。其他阅读材料属性属性与索引器之间的比较10.6 属性教程此教程包括两个示例。第一个示例展示如何声明和使用读/写属性。第二个示例演示抽象属性并展示如何在子类中重写这些属性。示例 1本示例展示一个 Person 类,它有两个属性:Name (string) 和 Age (int)。两个属性都是读/写属性。/ person.csusing 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(); / Print out the name and the age associated with the person: Console.WriteLine(Person details - 0, person); / Set some values on the person object: person.Name = Joe; person.Age = 99; Console.WriteLine(Person details - 0, person); / Increment the Age property: person.Age += 1; Console.WriteLine(Person details - 0, person); 输出Simple PropertiesPerson details - Name = N/A, Age = 0Person details - Name = Joe, Age = 99Person details - Name = Joe, Age = 100代码讨论请注意声明属性的方式,例如,考虑 Name 属性:public string Name get return myName; set myName = value; 属性的“设置”(Set) 方法和“获取”(Get) 方法包含在属性声明中。可以通过控制是否包含“获取”方法或“设置”方法来控制属性是读/写属性、只读属性还是只写属性。声明了属性后,可像使用类的字段那样使用这些属性。这使得获取和设置属性值时都可以使用非常自然的语法,如以下语句中所示:person.Name = Joe;person.Age = 99;注意属性“设置”方法中可以使用一个特殊的 value 变量。该变量包含用户指定的值,例如:myName = value;请注意用于使 Person 对象上的 Age 属性递增的简洁语法:person.Age += 1;如果使用单独的“设置”方法和“获取”方法建立属性模型,等效代码可能是:person.SetAge(person.GetAge() + 1);本示例中重写了 ToString 方法:public override string ToString() return Name = + Name + , Age = + Age;注意程序中未显式使用 ToString。默认情况下,它由 WriteLine 调用来调用。示例 2下面的示例展示如何定义抽象属性。抽象属性声明不提供属性访问器的实现。本示例演示如何在子类中重写这些属性。该示例包含三个文件。在“属性”示例中,这些文件被编译为单个编译;但在此教程中,每个文件都单独进行编译,且产生的程序集会由下一个编译引用:abstractshape.cs:包含抽象 Area 属性的 Shape 类。shapes.cs:Shape 类的子类。shapetest.cs:一个测试程序,它显示某些 Shape 派生的对象的面积。若要编译该示例,请使用命令行:csc abstractshape.cs shapes.cs shapetest.cs这样将生成可执行文件 shapetest.exe。文件 1:abstractshape.cs该文件声明包含 double 类型的 Area 属性的 Shape 类/ abstractshape.cs/ compile with: /target:library/ csc /target:library abstractshape.csusing System;public abstract class Shape private string myId; public Shape(string s) Id = s; / calling the set accessor of the Id property public string Id get return myId; set myId = value; / Area is a read-only property - only a get accessor is needed: public abstract double Area get; public override string ToString() return Id + Area = + string.Format(0:F2,Area); 代码讨论属性的修饰符就放在属性声明语句中,例如:public abstract double Area声明抽象属性时(如本示例中的 Area),指明哪些属性访问器可用即可,不要实现它们。本示例中,只有“获取”(Get) 访问器可用,因此属性为只读属性。文件 2:shapes.cs下面的代码展示 Shape 的三个子类,并展示它们如何重写 Area 属性来提供自己的实现。/ shapes.cs/ compile with: /target:library /reference:abstractshape.dllpublic class Square : Shape private int mySide; public Square(int side, string id) : base(id) mySide = side; public override double Area get / Given the side, return the area of a square: return mySide * mySide; public class Circle : Shape private int myRadius; public Circle(int radius, string id) : base(id) myRadius = radius; public override double Area get / Given the radius, return the area of a circle: return myRadius * myRadius * System.Math.PI; public class Rectangle : Shape private int myWidth; private int myHeight; public Rectangle(int width, int height, string id) : base(id) myWidth = width; myHeight = height; public override double Area get / Given the width and height, return the area of a rectangle: return myWidth * myHeight; 文件 3:shapetest.cs以下代码展示一个测试程序,它创建若干 Shape 派生的对象,并输出它们的面积。/ shapetest.cs/ compile with: /reference:abstractshape.dll;shapes.dllpublic class TestClass public static void Main() Shape shapes = new Square(5, Square #1), new Circle(3, Circle #1), new Rectangle( 4, 5, Rectangle #1) ; System.Console.WriteLine(Shapes Collection); foreach(Shape s in shapes) System.Console.WriteLine(s); 输出Shapes CollectionSquare #1 Area = 25.00Circle #1 Area = 28.27Rectangle #1 Area = 20.00“库”示例本示例说明如何在 C# 中创建和使用 DLL。该示例包含库教程的源代码。在 Visual Studio 内生成并运行示例生成并运行“库”示例打开解决方案 (Libraries.sln)。在“解决方案资源管理器”中,右击“FunctionTest”项目并单击“设为启动项目”。在“解决方案资源管理器”中,右击“FunctionTest”项目并单击“属性”。打开“配置属性”文件夹并单击“调试”。在“命令行参数”属性中,输入 3 5 10。单击“确定”。在“调试”菜单中,单击“开始执行(不调试)”。这将自动在“Functions”目录中生成库并执行程序。从命令行生成并运行示例生成并运行“库”示例使用“更改目录”命令转到“Functions”目录。键入下列内容:csc /target:library /out:Functions.dll Factorial.cs DigitCounter.cs使用“更改目录”命令转到“FunctionTest”目录。键入下列内容:copy .FunctionsFunctions.dll .csc /out:FunctionTest.exe /R:.Functions.DLL FunctionClient.csFunctionTest 3 5 10库教程请参见C# 教程本教程展示如何在 C# 中创建和使用库。示例文件请参见“库”示例以下载和生成本教程中讨论的示例文件。其他阅读材料 创建和使用 C# DLL C# 编译器选项教程本教程演示如何使用必要的编译器选项创建托管 DLL 文件,以及如何通过客户程序使用该库。示例本示例使用下列模块: DLL 库 (Functions.dll),从以下源文件生成:Factorial.cs:计算并返回某数的阶乘。DigitCounter.cs:计算所传递的字符串中的数字位数。 使用该 DLL 的客户程序 (FunctionTest.exe),从源文件 FunctionClient.cs 进行编译。本程序显示输入参数的阶乘。生成库若要生成该库,请将 Functions 作为当前目录,并在命令提示处键入下列内容:csc /target:library /out:Functions.dll Factorial.cs DigitCounter.cs其中:/target:library指定输入文件是个 DLL,而不是可执行文件(这还将阻止编译器查找默认入口点)。/out:Functions.dll指定输出文件名是 Functions.dll。通常,输出名与命令行上的第一个 C# 源文件(本示例中为 Factorial)的名称相同。Factorial.cs DigitCounter.cs指定要编译并放入 DLL 的文件。编译客户程序若要编译该程序,请将 FunctionTest 作为当前目录,并在命令提示处键入下列内容:copy .FunctionsFunctions.dll .csc /out:FunctionTest.exe /R:Functions.DLL FunctionClient.cs其中:/out:FunctionTest.exe指定输出文件名为 FunctionTest.exe。/R:Functions.DLL指定解析引用时必须包括 Functions.DLL。该 DLL 必须位于当前目录中,或具有完全限定的路径。FunctionClient.cs指定客户源代码。这将创建可执行文件 FunctionTest.exe。文件 1:Factorial.cs以下代码计算传递给此方法(与“库”示例不同,请将此方法编译到库中)的整数的阶乘。/ Factorial.cs/ compile with: /target:libraryusing System;/ Declares a namespace. You need to package your libraries according/ to their namespace so the .NET runtime can correctly load the space Functions public class Factorial / The Calc static method calculates the factorial value for the/ specified integer passed in: public static int Calc(int i) return(i = 1) ? 1 : (i * Calc(i-1); 文件 2:DigitCounter.cs以下代码用于计算所传递的字符串中的数字字符个数:/ DigitCounter.cs/ compile with: /tar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论