




已阅读5页,还剩594页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
msdn C#编程指南C# 编程指南深入 C# 程序Hello World - 您的第一个程序(C# 编程指南)Hello World - 您的第一个程序(C# 编程指南)Visual Studio 2008其他版本更新:2007 年 11 月以下控制台程序是传统“Hello World!”程序的 C# 版,该程序显示字符串Hello World!。C#/ A Hello World! program in C#using System;namespace HelloWorld class Hello static void Main() System.Console.WriteLine(Hello World!); / Keep the console window open in debug mode. System.Console.WriteLine(Press any key to exit.); System.Console.ReadKey(); 现在,让我们依次分析此程序的重要组成部分。注释第一行包含注释语句:C#/ A Hello World! program in C#/字符将这行的其余内容转换为注释内容。还可通过将文本块置于/*和*/字符之间使其变成注释,例如:C#/* A Hello World! program in C#.This program displays the string Hello World! on the screen. */Main 方法C# 程序必须包含一个Main方法,用于控制程序的开始和结束。在Main方法中创建对象和执行其他方法。Main方法是驻留在类或结构内的静态方法。在前面的“Hello World!”示例中,此方法驻留在一个名为Hello的类中。用下列方式之一声明Main方法: 该方式返回void:C#static void Main() /. 它还可以返回int:C#static int Main() /. return 0; 由于有这两个返回类型,它可以带有参数:C#static void Main(string args) /.- 或 -C#static int Main(string args) /. return 0;Main方法的参数是string数组,该数组表示用于激活程序的命令行参数。请注意,不像 C+,该数组不包含可执行 (exe) 文件名。通过按 F5 在调试模式下运行时,在 Main 方法的末尾调用ReadKey将使得控制台窗口无法退出,从而使您无法阅读输出。有关使用命令行参数的更多信息,请参见Main() 和命令行参数(C# 编程指南)中的示例和如何:创建和使用 C# DLL(C# 编程指南)。输入和输出C# 程序通常使用 .NET Framework 的运行库提供的输入/输出服务。语句System.Console.WriteLine(Hello World!);使用了WriteLine方法,该方法是运行库中的Console类的输出方法之一。它显示了标准输出流使用的字符串参数,输出流后面跟一个新行。其他Console方法用于不同的输入和输出操作。如果程序开始处包含using System;指令,则无需完全限定System类和方法即可直接使用它们。例如,您可以改为调用Console.WriteLine,而不必指定System.Console.Writeline:C#using System;C#Console.WriteLine(Hello World!);有关输入/输出方法的更多信息,请参见System.IO。编译和执行可以通过在 Visual Studio IDE 中创建项目或使用命令行来编译“Hello World!”程序。使用 Visual Studio 命令提示符窗口或调用 vsvars32.bat 将 Visual C# 工具集放置在命令提示符下的路径中。从命令行编译程序: 使用任何文本编辑器创建源文件,并将其保存为名如Hello.cs的文件。C# 源代码文件使用的扩展名是.cs。 若要激活编译器,请输入命令:csc Hello.cs如果程序没有包含任何编译错误,则将创建一个Hello.exe文件。 若要运行程序,请输入命令:Hello有关 C# 编译器及其选项的更多信息,请参见C# 编译器选项。请参见概念C# 编程指南Visual C# 示例参考深入 C# 程序其他资源C# 参考C# 程序的通用结构(C# 编程指南)C# 程序的通用结构(C# 编程指南)Visual Studio 2008其他版本更新:2007 年 11 月C# 程序可由一个或多个文件组成。每个文件都可以包含零个或零个以上的命名空间。一个命名空间除了可包含其他命名空间外,还可包含类、结构、接口、枚举、委托等类型。以下是 C# 程序的主干,它包含所有这些元素。C#/ A skeleton of a C# program using System;namespace YourNamespace class YourClass struct YourStruct interface IYourInterface delegate int YourDelegate(); enum YourEnum namespace YourNestedNamespace struct YourStruct class YourMainClass static void Main(string args) /Your program starts here. 相关章节更多信息: 类(C# 编程指南) 结构(C# 编程指南) 命名空间(C# 编程指南) 接口(C# 编程指南) 委托(C# 编程指南)C# 语言规范有关更多信息,请参见C# 语言规范中的以下各章节: 1.2 程序结构 9.1 编译单元(命名空间)请参见概念C# 编程指南Visual C# 示例参考深入 C# 程序其他资源C# 参考Main() 和命令行参数(C# 编程指南)Main() 和命令行参数(C# 编程指南)Visual Studio 2008更新:2007 年 11 月Main方法是 C# 控制台应用程序或窗口应用程序的入口点。(库和服务不要求将Main方法作为入口点。)应用程序启动时,Main方法是第一个调用的方法。C# 程序中只能有一个入口点。如果您有多个类都包含Main方法,则必须使用/main编译器选项编译您的程序,以指定用作入口点的Main方法。有关更多信息,请参见/main(指定 Main 方法的位置)(C# 编译器选项)。C#class TestClass static void Main(string args) / Display the number of command line arguments: System.Console.WriteLine(args.Length); 概述 Main方法是 .exe 程序的入口点,程序控制流在该处开始和结束。 Main在类或结构的内部声明。Main必须是静态的,且不应该是公用的。(在前面的示例中,它接受默认访问级别private。)但不要求封闭类或结构是静态的。 Main的返回类型有两种:void或int。 所声明的Main方法可以具有包含命令行实参的string形参,也可以不具有这样的形参。使用 Visual Studio 创建 Windows 窗体应用程序时,可以手动添加形参,也可以使用Environment类获取命令行实参。形参读取为从零开始编制索引的命令行实参。与 C 和 C+ 不同,在 C# 中不将程序名称视为第一个命令行实参。本节内容 命令行参数(C# 编程指南) 如何:显示命令行参数(C# 编程指南) 如何:使用 foreach 访问命令行参数(C# 编程指南) Main() 返回值(C# 编程指南)C# 语言规范有关更多信息,请参见C# 语言规范中的以下各章节: 1.1 Hello World请参见概念C# 编程指南Visual C# 示例参考深入 C# 程序命令行参数(C# 编程指南)命令行参数(C# 编程指南)Visual Studio 2008更新:2007 年 11 月Main方法可以使用参数,在这种情况下它采用下列形式之一:C#static int Main(string args)C#static void Main(string args)说明:若要在 Windows 窗体应用程序中的Main方法中启用命令行参数,必须手动修改 program.cs 中Main的签名。Windows 窗体设计器生成的代码创建没有输入参数的Main。也可以使用Environment.CommandLine或Environment.GetCommandLineArgs从控制台或 Windows 应用程序中的任何位置访问命令行参数。Main方法的参数是表示命令行参数的String数组。一般是通过测试Length属性来确定参数是否存在,例如:C#if (args.Length = 0) System.Console.WriteLine(Please enter a numeric argument.); return 1;还可以使用Convert类或Parse方法将字符串参数转换为数值类型。例如,下面的语句使用Parse方法将string转换为long数字:long num = Int64.Parse(args0);也可以使用别名为Int64的 C# 类型long:long num = long.Parse(args0);还可以使用Convert类的方法ToInt64完成同样的工作:long num = Convert.ToInt64(s);有关更多信息,请参见Parse和Convert。示例下面的示例演示如何在控制台应用程序中使用命令行参数。程序在运行时采用一个参数,将该参数转换为整数,并计算该数的阶乘。如果没有提供参数,则程序发出一条消息来解释程序的正确用法。说明:在 Visual Studio 中运行应用程序时,可以在“项目设计器” -“调试”页中指定命令行参数。有关如何使用命令行参数的更多示例,请参见如何:创建和使用 C# DLL(C# 编程指南)。C#public class Functions public static long Factorial(int n) / Test for invalid input if (n 256) return -1; / Calculate the factorial iteratively rather than recursively: long tempResult = 1; for (int i = 1; i = n; i+) tempResult *= i; return tempResult; class MainClass static int Main(string args) / Test if input arguments were supplied: if (args.Length = 0) System.Console.WriteLine(Please enter a numeric argument.); System.Console.WriteLine(Usage: Factorial ); return 1; / Try to convert the input arguments to numbers. This will throw / an exception if the argument is not a number. / num = int.Parse(args0); int num; bool test = int.TryParse(args0, out num); if(test = false) System.Console.WriteLine(Please enter a numeric argument.); System.Console.WriteLine(Usage: Factorial ); return 1; / Calculate factorial. long result = Functions.Factorial(num); / Print result. if(result = -1) System.Console.WriteLine(Input must be 0 and “调试”页中指定命令行参数。示例本示例显示了传递给命令行应用程序的命令行参数。显示的输出对应于上表中的第一项。C#class CommandLine static void Main(string args) / The Length property provides the number of array elements System.Console.WriteLine(parameter count = 0, args.Length); for (int i = 0; i “调试”页中指定命令行参数。示例下面的示例演示如何使用foreach输出命令行参数。C#/ arguments: John Paul MaryC#class CommandLine2 static void Main(string args) System.Console.WriteLine(Number of command line parameters = 0, args.Length); foreach (string s in args) System.Console.WriteLine(s); /* Output: Number of command line parameters = 3 John Paul Mary*/请参见任务如何:显示命令行参数(C# 编程指南)概念C# 编程指南Main() 和命令行参数(C# 编程指南)参考foreach,in(C# 参考)Main() 返回值(C# 编程指南)ArraySystem.CollectionsMain() 返回值(C# 编程指南)Main() 返回值(C# 编程指南)Visual Studio 2008更新:2007 年 11 月Main方法可以是void类型:C#static void Main() /.它还可以返回int:C#static int Main() /. return 0;如果不需要使用Main的返回值,则返回void可以使代码变得略微简单。但是,返回整数可使程序将状态信息与调用该可执行文件的其他程序或脚本相关。下面的示例演示使用Main的返回值。示例在此示例中,使用了一个批处理文件来执行程序并测试Main函数的返回值。在 Windows 中执行程序时,Main函数返回的任何值都将存储在名为ERRORLEVEL的环境变量中。通过检查ERRORLEVEL变量,批处理文件可以确定执行的结果。通常,返回值为零指示执行成功。下面是一个非常简单的程序,其Main函数返回零。C#class MainReturnValTest static int Main() /. return 0; 由于此示例使用了批处理文件,因此最好从命令行编译这段代码,如如何:设置环境变量中所示。然后,使用批处理文件调用前面的代码示例所生成的可执行文件。由于代码返回零,因此批处理文件将报告成功。但如果前面的代码更改为返回非零值,然后重新编译,则批处理文件的后续执行将指示失败。rem test.batecho offMainReturnValueTestif %ERRORLEVEL% = 0 goto good:fail echo Execution Failed echo return value = %ERRORLEVEL% goto end:good echo Execution Succeded echo return value = %ERRORLEVEL% goto end:end示例输出Execution Succededreturn value = 0请参见任务如何:显示命令行参数(C# 编程指南)如何:使用 foreach 访问命令行参数(C# 编程指南)概念C# 编程指南Main() 和命令行参数(C# 编程指南)其他资源C# 参考类型(C# 编程指南)类型(C# 编程指南)Visual Studio 2008更新: 2008 年 7 月类型、变量和值C# 是一种强类型语言。每个变量和常量都有一个类型,每个计算为值的表达式也是如此。每个方法签名为每个输入参数和返回值指定一个类型。.NET Framework 类库定义了一组内置数值类型以及表示各种逻辑构造的更复杂的类型,例如文件系统、网络连接、对象的集合和数组及日期。典型 C# 程序使用类库中的类型,还使用为特定于该程序问题域的概念建模的用户定义类型。类型中存储的信息可以包括: 该类型的变量所需的存储空间。 该类型可以表示的最大值和最小值。 该类型包含的成员(方法、字段、事件等)。 该类型所继承的基类型。 将在运行时为其分配变量内存的位置。 允许的运算种类。编译器使用类型信息确保代码中执行的所有运算都是类型安全的。例如,如果声明了一个int类型的变量,则编译器允许您在加法和减法运算中使用此变量。如果尝试在一个bool类型的变量上执行相同的运算,则编译器会产生错误,如下面的示例所示:C#int a = 5; int b = a + 2; /OKbool test = true; * / Error. Operator + cannot be applied to operands of type int and c = a + test;说明:请 C 和 C+ 开发人员注意,在 C# 中,bool不能转换为int。编译器将类型信息作为元数据嵌入到可执行文件中。公共语言运行时 (CLR) 会在运行时使用该元数据,以进一步确保它在分配和回收内存时类型安全。在变量声明中指定类型在程序中声明变量或常量时,必须指定其类型或者使用关键字var让编译器可以推断其类型。下面的示例演示了一些使用内置数值类型和复杂的用户定义类型的变量声明:C#/ Declaration only:float temperature;string name;MyClass myClass;/ Declaration with initializers (four examples):char firstLetter = C;var limit = 3;int source = 0, 1, 2, 3, 4, 5 ;var query = from item in source where item = limit select item;在方法签名中指定方法参数和返回值的类型。下面的签名中演示的方法需要用int作为输入参数并返回一个字符串:C#public string GetName(int ID) if (ID names.Length) return namesID; else return String.Empty;private string names = Spencer, Sally, Doug ;声明了一个变量后,不能使用新类型重新对它进行声明,也不能向它赋与它的声明类型不兼容的值。例如,不能声明int,然后向它赋予布尔值true。但是,值可以转换为其他类型,例如将值赋给新变量或者作为方法参数传递时。编译器会自动执行不会导致数据丢失的类型转换。可能导致数据丢失的转换需要源代码内有强制转换。有关更多信息,请参见强制转换和类型转换(C# 编程指南)。内置类型C# 提供了一组标准的内置数值类型,用来表示整数、浮点值、布尔表达式、文本字符、十进制值和其他数据类型。还有内置的string和object类型。您可以在任何 C# 程序中使用这些类型。有关内置类型的更多信息,请参见类型参考表(C# 参考)。自定义类型您可以使用struct、class、interface和enum结构创建自己的自定义类型。.NET Framework 类库本身是 Microsoft 提供的自定义类型的集合,您可以在自己的应用程序中使用它们。默认情况下,类库中最常用的类型在所有 C# 程序中均可用。而对于其他类型,则仅当您显式添加定义这些类型的程序集的项目引用后它们才可用。编译器拥有对该程序集的引用后,才可以在源代码中声明在该程序集中声明的类型的变量(和常量)。有关更多信息,请参见.NET Framework 类库。通用类型系统请务必了解有关 .NET Framework 中的类型系统的以下两个基本点: 它支持继承原则。类型可从称为基类型的其他类型派生。派生类型继承基类型的方法、属性和其他成员(存在一些限制)。之后,基类型可从某些其他类型派生,这种情况下,派生类型继承其层次结构中这两个基类型的成员。包括如System.Int32(C# 关键字:int)等内置数值类型在内的所有类型,最终都是从一个基类派生得到的,该基类即System.Object(C# 关键字:object)。这种统一的类型层次结构称为通用类型系统(CTS)。有关 C# 中的继承的更多信息,请参见继承(C# 编程指南)。 CTS 中的每一个类型都被定义成了值类型或引用类型。这包括 .NET Framework 类库中的所有自定义类型以及您自己的用户定义类型。使用关键字struct定义的类型是值类型;所有内置数值类型都是structs。使用关键字class定义的类型是引用类型。引用类型和值类型有不同的编译时规则和不同的运行时行为。下图演示了 CTS 中的值类型和引用类型之间的关系。CTS 中的值类型和引用类型说明:可以看到,最常用的类型都组织到了System命名空间。但是,类型所在的命名空间与类型是值类型还是引用类型没有关系。值类型值类型是从派生自System.Object的System.ValueType派生的。派生自System.ValueType的类型在 CLR 中有特殊行为。值类型变量直接包含它们的值,这意味着内存在声明变量的任意上下文中都是以内联方式分配的。值类型变量没有单独的堆分配或垃圾回收开销。值类型分为两个类别:struct和enum。内置数值类型是结构,它们具有可以访问的属性和方法。C#/ Static method on type Byte.byte b = Byte.MaxValue();但是,您可以声明它们并向它们赋值,就如同它们是简单的非聚合类型一样:C#byte num = 0xA;int i = 5;char c = Z;例如,值类型是密封的,这意味着您不能从System.Int32派生类型,并且不能定义一个结构以便从任何用户定义的类或结构继承,因为结构只能从System.ValueType继承。但是,一个结构可以实现一个或更多个接口。可以将结构类型强制转换为接口类型;但这会使装箱操作在托管堆上的一个引用类型对象内包装该结构。在将值类型传递给将System.Object作为输入参数的方法时会发生装箱操作。有关更多信息,请参见装箱和取消装箱(C# 编程指南)。可以使用struct关键字创建自己的自定义值类型。通常,结构可作为一小组相关变量的容器,如下面的示例所示:C#public struct CoOrds public int x, y; public CoOrds(int p1, int p2) x = p1; y = p2; 有关结构的更多信息,请参见结构(C# 编程指南)。有关 .NET Framework 中的值类型的更多信息,请参见通用类型系统中的值类型。另一类值类型是enum。枚举定义一组已命名的整数常量。例如,.NET Framework 类库中的System.IO.FileMode枚举包含一组已命名的整数常量,用来指定应如何打开文件。其定义方式如下面的示例所示:C#public enum FileMode CreateNew = 1, Create = 2, Open = 3, OpenOrCreate = 4, Truncate = 5, Append = 6,Create常量具有值 2。但是,在阅读源代码时,名称可为人们提供更多信息,因此最好使用枚举而不使用常量文本数字。所有枚举均是从继承自System.ValueType的System.Enum继承的。所有适用于结构的规则同样也适用于枚举。有关枚举的更多信息,请参见枚举类型(C# 编程指南)。引用类型定义为类、委托、数组或接口的类型是引用类型。在运行时,当您声明引用类型的变量时,该变量会一直包含值null,直至您使用new运算符显式创建对象的实例,或者为该变量分配已经使用new, as shown in the following example:在其他位置创建的对象C#MyClass mc = new MyClass();MyClass mc2 = mc;接口必须与实现它的类对象一起初始化。如果MyClass实现IMyInterface,则您创建了IMyInterface的实例,如下面的示例所示:C#IMyInterface iface = new MyClass();创建对象时,将在托管堆上分配内存,变量只保存对对象位置的引用。对于托管堆上的类型,在 CLR 的自动内存管理功能(称为“垃圾回收”)对它们进行分配和回收时都需要系统开销。但是,也对垃圾回收进行了高度优化,在大多数情况下它不会引起性能问题。有关垃圾回收的更多信息,请参见自动内存管理。所有数组都是引用类型,即使其元素是值类型也不例外。数组是从System.Array类隐式派生的,但可以通过 C# 提供的简化语法来声明和使用它们,如下面的示例所示:C#/ Declare and initialize an array of nums = 1, 2, 3, 4, 5 ;/ Access an instance property of System.A len = nums.Length;引用类型完全支持继承。创建类时,可以从没有定义为sealed的任何其他接口或类继承,而其他类则可以从您创建的类继承并重写虚方法。有关如何创建自己的类的更多信息,请参见类和结构(C# 编程指南)。有关继承和虚方法的更多信息,请参见继承(C# 编程指南)。文本值类型在 C# 中,文本值从编译器接收类型。您可以通过在数字末尾追加一个字母来指定应如何类型化该数字文本。例如,若要指定应按浮点数来处理值 4.56,则在该数字后追加一个“f”或“F”:4.56f。如果没有追加字母,则编译器将为该文本推断一个类型。有关可以使用字母后缀指定的类型的更多信息,请参见值类型(C# 参考)中各个类型的参考页。由于文本已类型化,且所有类型最终都是从System.Object派生,因此您可以编写和编译如下所示的代码:C#string s = The answer is + 5.ToString();/ Outputs: The answer is 5Console.WriteLine(s);Type type = 12345.GetType();/ Outputs: System.Int32Console.WriteLine(type);泛型类型一个类型可以通过一个或多个类型参数声明,而这些类型参数作为客户端代码在创建该类型的实例时提供的实际类型(具体类型)的占位符。这种类型称为“泛型类型”。例如,.NET Framework 类型System.Collections.Generic.List有一个类型参数,按照约定该类型参数的名称为 T。在创建该类型的实例时,会指定列表将包含的对象的类型,例如字符串:C#List strings = new List();使用类型参数便可以重复使用相同的类存放任意类型的元素,而不必将每个元素都转换为对象。泛型集合类称为“强类型集合”,因为编译器知道集合中元素的特定类型,举例来说,如果尝试向上面示例中的strings对象添加整数,编译器会在编译时引发错误。有关更多信息,请参见泛型(C# 编程指南)。隐式类型、匿名类型和可以为 null 的类型如前面所述,您可以使用关键字var隐式类型化一个局部变量(非类成员)。该变量在编译时仍然会接收一个类型,但该类型是由编译器提供的。有关更多信息,请参见隐式类型的局部变量(C# 编程指南)。某些情况下为相关值的简单集合创建命名类型是不方便的,因为这些相关值不准备在方法边界外存储或传递。可以创建匿名类型来实现此目的。有关更多信息,请参见匿名类型(C# 编程指南)。普通的值类型不能有null值。但是,可以通过在类型后面附加?来创建可以为 null 值的类型。例如,int?是一个也可以具有null值的int类型。在 CTS 中,可以为 null 的类型是泛型结构类型System.Nullable的实例。在向其数值可能为 null 的数据库传入数据和从中传出数据时,可以为 null 的类型尤其有用。有关更多信息,请参见可空类型(C# 编程指南)。相关章节有关更多信息,请参见下列主题: 强制转换和类型转换(C# 编程指南) 装箱和取消装箱(C# 编程指南) 值类型(C# 参考) 引用类型(C# 参考) 类和结构(C# 编程指南) 匿名类型(C# 编程指南) 泛型(C# 编程指南)C# 语言规范有关类型的更多信息,请参见C# 语言规范中的以下各章节: 1.3 类型和变量 3.8 命名空间和类型名称 4.1 值类型 4.2 引用类型 4.3 装箱和取消装箱请参见概念C# 编程指南XML 数据类型的转换参考不同语言的数据类型比较整型表(C# 参考)其他资源C# 参考修订记录日期历史记录原因2008 年 7 月增加了介绍性信息及有关类型声明、通用类型系统、值类型和引用类型、文本和泛型类型的信息。信息补充。强制转换和类型转换(C# 编程指南)强制转换和类型转换(C# 编程指南)Visual Studio 2008更新: 2008 年 7 月由于 C# 是在编译时静态类型化的,因此变量在声明后就无法再次声明,或者无法用于存储其他类型的值,除非该类型可以转换为变量的类型。例如,不存在从整数到任意字符串的转换。因此,将i声明为整数后,就无法将字符串“Hello”赋予它,如下面的代码中所示。int i;i = Hello; / Error: Cannot implicitly convert type string to int但有时可能需要将值复制到其他类型的变量或方法参数中。例如,您可能有一个整数变量,您需要将该变量传递给参数类型化为double的方法。或者可能需要将类变量赋给接口类型的变量。这些类型的操作称为“类型转换”。在 C# 中,可以执行以下几种类型的转换: 隐式转换:由于该转换是一种安全类型的转换,不会导致数据丢失,因此不需要任何特殊的语法。例如,从较小整数类型到较大整数类型的转换以及从派生类到基类的转换都是这样的转换。 显式转换(强制转换):显式转换需要强制转换运算符。源变量和目标变量兼容,但由于目标变量的类型大小比源变量小(或者目标变量是源变量的一个基类),因此存在数据丢失的风险。 用户定义的转换:可以定义一些特殊的方法来执行用户定义的转换,从而使不具有基类派生类关系的自定义类型之间可以显式和隐式转换。有关更多信息,请参见转换运算符(C# 编程指南)。 使用帮助程序类的转换:若要在不兼容的类型之间进行转换,例如在整数与System.DateTime对象之间转换,或者在十六进制字符串与字节数组之间转换,则可以使用System.BitConverter类、System.Convert类和内置数值类型的Parse方法,例如Int32.Parse。有关更多信息,请参见如何:将字节数组转换为 int(C# 编程指南)、如何:将字符串转换为整型(C# 编程指南)和如何:在十六进制字符串与数值类型之间转换(C# 编程指南)。隐式转换对于内置数值类型,如果要存储的值无需截断或四舍五入即可适应变量,则可以进行隐式转换。例如,longlong(C# 参考)类型的变量(8 字节整数)能够存储intint(C# 参考)(在 32 位计算机上为 4 字节)可存储的任何值。在下面的示例中,编译器先将右侧的值隐式转换为long类型,再将它赋给bigNum。C#/ Implicit conversion. num long can/ hold any value an int can hold, and more!int num = 2147483647;long bigNum = num;有关所有隐式数值转换的完整列表,请参见隐式数值转换表(C# 参考)。对于引用类型,隐式转换始终存在于从一个类转换为该类的任何一个直接或间接的基类或接口的情况。由于派生类始终包含基类的所有成员,因此不必使用任何特殊语法。Derived d = new Derived();Base b = d; / Always OK.显式转换但是,如果进行转换可能会导致信息丢失,则编译器会要求执行显式转换,显式转换也称为“强制转换”。强制转换是显式通知编译器您打算进行转换且您知道可能会发生数据丢失的一种方式。若要执行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区发展新质生产力的实践模式
- 新质生产力覆盖的十四大行业
- 2025年骨科手术并发症处理技巧考核答案及解析
- 2025年心血管疾病影像学检查模拟考试答案及解析
- 2025年神经病学病例分析与诊断能力测试卷答案及解析
- 2025年心血管内科危重病例急救应急演练答案及解析
- 2025年眼科常见疾病临床诊疗考核试卷答案及解析
- 2025年康复医学评估与康复方案设计考试卷答案及解析
- 2025年神经科学综合知识测试模拟试卷答案及解析
- 2025年放射肿瘤科治疗方案设计案例答案及解析
- 超市服务礼仪培训课件
- 购物中心策划培训课件
- 增生性肌炎的超声表现
- 供应商黑名单管理制度
- 我国新一代人工智能创新发展行动计划
- 2025-2030年中国吉林汽车零部件产业发展分析及投资前景调研报告
- 曲靖高级技工学校学生管理手册与实际操作指南
- 2025-2030曲线显示设备行业市场现状供需分析及投资评估规划分析研究报告
- jsa在安全生产管理中的应用
- GB 4789.42-2025食品安全国家标准食品微生物学检验诺如病毒检验
- 思想道德与法治2023年版教材资料全集
评论
0/150
提交评论