企业考勤系统的设计与实现外文文献译文.docx

上传人:b****6 文档编号:12716041 上传时间:2023-06-07 格式:DOCX 页数:19 大小:26.77KB
下载 相关 举报
企业考勤系统的设计与实现外文文献译文.docx_第1页
第1页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第2页
第2页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第3页
第3页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第4页
第4页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第5页
第5页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第6页
第6页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第7页
第7页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第8页
第8页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第9页
第9页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第10页
第10页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第11页
第11页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第12页
第12页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第13页
第13页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第14页
第14页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第15页
第15页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第16页
第16页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第17页
第17页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第18页
第18页 / 共19页
企业考勤系统的设计与实现外文文献译文.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

企业考勤系统的设计与实现外文文献译文.docx

《企业考勤系统的设计与实现外文文献译文.docx》由会员分享,可在线阅读,更多相关《企业考勤系统的设计与实现外文文献译文.docx(19页珍藏版)》请在冰点文库上搜索。

企业考勤系统的设计与实现外文文献译文.docx

企业考勤系统的设计与实现外文文献译文

 

C#编程语言概述

1 C,C++和 C#的历史

C#编程语言是在 C 和 C++编程语言的精神上创造出来的。

这说明了其拥有强大的功

能和简单的学习曲线。

但是不能说 C#与 C 和 C++相同,因为 C#是建立在这两者基础之

上的,微软灵活地删除了一些比较繁琐的功能——比如指针。

本节将了解 C 和 C++语言,

并追踪其演变成 C#的历史。

C 语言最初目的是为了在 UNIX 操作系统上使用。

它用来创建了许多 UNIX 应用程序,

包括 C 编译器,并最终用来写 UNIX 本身。

它在学术领域被广泛地接受,包括商业领域,

以及软件厂商,如微软和 Borland 发布了为个人电脑服务的 C 编译器。

原始的 Windows

API 的设计采用 C 语言来编写 Windows 代码,而最新的一组核心 Windows 操作系统的

API 至今为止仍然保留 C 编译器。

从设计的角度来看,C 缺乏一些细节,其他语言如 Smalltalk 中已经接受了:

一个对

象的概念。

你将在第 8 章“编写面向对象的代码”中了解更多关于对象的描述。

现在,

我们认为一个对象是作为数据的集合,并且可以对数据执行一组操作的。

对象类型的编

码可以用 C 来完成,但对象的概念不会强制出现在这个语言中。

如果你想构造你的代码,

使之类似于一个对象,可以。

如果你不想这么做,C 也确实不会介意。

对象是不是这门语

言的固有部分,所以很多人并没有太注意这种编程范式。

面向对象开发的概念开始获得认可后,很明显,C 需要细化到去包含这一新的方式。

C++的开发包含了这种改进,它被设计成可以兼容 C(比如,所有的 C 程序也将是 C++程

序,并可以用 C++编译器编译)。

C++语言主要是增加了对对象这个新概念的支持。

C++

语言额外提供了了对类(对象的“模板”)的支持,并启用了一整代的 C++程序员去思考

它及其行为的使用规范。

C++语言是对 C 的改进,但它仍然存在一些缺点。

 C 和 C ++是很难得到处理的。

像易于使用的语言,如 Visual Basic,C 和 C ++是非常底层的,并要求你编写大量的编码,

来使你的应用程序运行良好。

你必须编写自己的代码来处理类似于内存管理和错误检查

的问题。

C 和 C++可以实现非常强大的应用程序,但你需要确保你的代码编写得很好,一

个漏洞就可以使整个应用程序崩溃或行为异常。

由于固定采用 C 向后兼容 C++的设计目

标,C++无法打破 C 的底层特性。

微软设计的 C#,保留了很多 C 和C++的语法。

对那些语言熟悉的开发者可以很快地

掌握 C#。

并且尽快地开始代码的编写。

对于 C#来说,它有一个很大的优势,就是它的设

 

1

 

计者选择不让它去兼容 C 和 C++。

虽然这可能看起来像一个糟糕的处理,但它实际上是

一个好消息。

C#剔除了一些使得 C 和 C++难以实现的东西。

因为所有的 C 代码也是 C++

代码,C++必须保留 C 中所有的原始怪癖和不足。

C#中开始用一个纯净的环境,没有任

何兼容性的要求,因此可以保留其前辈的长处,并且丢弃使得 C 和 C++程序生存困难的

弱点。

2 引入 C#

C#这门在.NET Framework 中被引进的全新语言,是从 C++衍生出来的。

然而,C#是

一个现代化的,面向对象的(自下而上的)、类型安全的语言。

3 语言特征

下面的章节来看看 C#语言的一些特点。

如果它们中的某些概念对你来说很陌生,不

要担心,所有这些都在后面的章节中详细介绍。

4 类

在 C#中的所有代码和数据必须包含在一个类中。

你不能在类外定义一个变量,同样

的你也不能写任何不在类中的代码。

类可以有构造函数,当创建该类的对象时,会自动

生成它的析构函数;当类的对象被释放时,类的析构函数也就被销毁了。

类支持单继承,

并且所有类最终都是从基类调用对象派生出来的。

 C#支持各版本的技术,可以保证随着

时间的推移,你的类始终保持与使用早期版本时的类代码的兼容性。

下面让我们来看一个叫做 Family 的类的例子。

这个类包含了两个静态域来保存成员

的第一个名字和最后一个名字。

同时用一个方法来返回成员的全名。

class Class1

{

public string FirstName;

public string LastName;

public string FullName()

{

}

return FirstName + LastName;

}

 

2

 

注:

单继承意味着一个 C#类只能从一个基类中继承。

在 C#中,你可以将你的类打包到一个名为 namespace 的类的集合里面。

命名空间有

名称,可以在逻辑上帮助类集进行分组。

在你开始学习 C#时,很明显,有关于.NET

Framework 所有命名空间都是从系统开始的。

微软还选择了包括一些有助于兼容以前代码

的类和 API 的访问通道。

这些类都包含在 Microsoft 命名空间内。

5数据类型

C#允许你使用两种类型的数据:

值类型和引用类型。

值类型变量保存实际值。

引用

类型保存实际的值储存在内存中其他的位置信息。

基本类型如字符型,整型,浮点型,

以及枚举型和结构体类型,它们都是值类型。

而对象和数组类型被处理成了引用类型。

C#预定义了引用类型(对象和字符串),同时也预定义了值类型(短字符,短整型,整型,

长整型,无符号字符型,无符号短整型,无符号整型,无符号长整型,浮点型,双精度

浮点型,布尔型,字符型和十进制类型)。

你也可以在代码中定义自己的值类型和引用类

型。

所有的值类型和引用类型最终都会被一个由基本类型派生出的对象执行。

C#允许将一个类型的值转换为另一种类型的值。

你可以使用隐式转换和显式转换来

实现。

隐式转换总是能成功,并且不会丢失任何信息(例如,你可以转换将一个整型变

量隐式转换成一个长整型变量,而不会丢失任何信息,因为长整型变量比整型变量存储

的容量大)。

显式转换可能会导致你丢失部分数据(例如,将一个长整型变量转换为一个

整型变量可能会导致数据丢失,理由同上)。

你必须在你的代码中编写转换运算符,来实

现显式转换。

6交叉引用

请参阅第 3 章,“同变量一起工作”来了解关于隐式转换和显式转换的详细信息。

你可以在 C#中使用这一维数组和多维数组。

多维数组可以是矩阵,这个阵列和多维

数组具有相同的行列数;或者是锯齿状的,其中每个阵列的具有不同的尺寸。

类和结构体可以拥有数据成员,称之为属性和域。

域是封装起来的类或结构体相关

的变量。

你可以定义一个称为 Employee 的结构体,例如,有一个称为 Name 的域。

如果

你定义一个名为 CurrentEmployee的 Employee 类型的变量,你可以通过编写

CurrentEmployee.Name 来获取雇员的姓名。

属性就像域,但是可以让你编写代码来指定

代码访问值时应该发生什么。

如果员工的名字必须从数据库中读取,例如,你可以编写

代码:

“当有人问 Name 属性的值时,从数据库中读取名字,并且以字符型返回这个值。

3

7函数

 

函数是一段可以随时调用的代码,当它被调用时可以有返回值,也可以没有返回值。

有一个函数的例子在前面展示过,在本章中,在 Family 这个类中有函数的例子,Family

类中实现显示全名的功能的就是一个函数。

函数通常会联合一些返回信息的代码,而方

法通常不返回信息。

不过对于我们而言,我们一般都会把它们都归结于函数。

函数可以有四种类型的参数:

输入的参数有值传递到函数内,但是函数无法改变它们的值。

输出参数没有任何值,当他们被传递给函数时,函数可以给它们值并且将这个值传

回给它的调用者。

引用参数通过引用传递另外的一个值。

它们有一个值传递给函数,并且该值可以在

函数内部被改变。

参数的参数在列表中定义了一个数组变量。

C#和 CLR 携手合作,提供自动内存管理。

你并不需要编写“为一个整数分配足够的

内存”或者“留足够的空间让这个对象使用”这样的代码。

CLR 监视你的内存使用,并

且自动在你需要时自动地取回。

同时,当它检测到它不再被使用(这也被称为垃圾收集)

时会自动释放内存。

C#提供了大量的运算符,使你能够编写数学运算和移位运算的表达式。

它们当中的

大量(但并不是所有)运算符可以被重新定义,从而允许你更改这些运算符的作用。

C#允许你在一长串代码中定义不同的执行路径,使用关键字如 if,switch, while, for,

break 和 continue,能够使代码根据变量值的不同分入到不同的路径中。

类中可以包含代码和数据。

每一个类成员都有一个访问权限,它定义了这个成员对

其他对象的可见性。

 C#提供了 public,protected,internal,protected internal 和 private 这

些可接近的范围。

8变量

 

变量可以被定义为常量。

常量是在你的代码的执行过程中不能被改变值。

例如圆周

率的值是常量的一个很好的例子,因为它的值不会在你的代码的运行过程中发生改变。

枚举类型声明为一组相关的常量指定名称。

例如,你可以定义一组枚举类型,使用

Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune 和 Pluto 作为它们的值,并且

能够在代码中使用这些名字。

在代码中使用枚举类型的名字比你使用数字来表示每个行

星更具可读性。

 

4

 

C#提供了用于定义和处理事件的内置机制。

如果你写了一个需要执行很长时间的类,

你可能需要在操作完成时调用的一个事件来结束这个类。

客户可以订阅该事件,并在他

们的代码中使用,这使得当你完成你的冗长的操作得到的通知。

这个事件处理机制在 C#

机制使用了委托,这是引用的函数变量。

注:

事件处理程序是一个在你的代码中的程序,当一个事件发生时它决定了将会发

生什么动作,如用户点击一个按钮来执行的操作。

如果你的类保存了一个值,客户将会想要将你的这个类看成是一个数组来访问这个

值。

你可以写一段被称为索引的代码,使你的类就像是一个数组一样的被访问。

例如,

假设你写了一个名为 Rainbow 的类,类,包含了一组在彩虹中的颜色。

访问者可能需要

编写 MyRainbow [0]检索在彩虹的第一种颜色。

你可以在你的 Rainbow 类中写一个索引,

来定义调用者访问你的类时应该返回什么样的内容,就好像它是一个值的数组。

9 接口

C#支持接口,它聚集了属性,方法和阐述一套功能的事件。

C#类可以实现接口,它

通过接口告诉使用者该类支持的接口中记录的功能集。

你可以实现接口而不妨碍任何现

有的代码,最大限度地减少兼容性问题的干扰。

一旦接口被公开了,它就不能被改变,

但它可以通过继承来进化。

 C#类可以实现多个接口,虽然这个类只能从一个基类继承。

让我们来看看一个真实的例子,在 C#中接口具有非常积极的作用。

许多应用程序支

持当今的加载项。

假设你已经创建了编写应用程序的代码编辑器。

这个代码编辑器被执

行时,已具有了加载插件的能力。

要做到这一点,插件必须遵循一些规则。

该 DLL 加载

必须导出一个名为 CEEntry 的函数,DLL 的名称使用 CEd 作为文件名的开头。

当我们运

行我们的代码编辑器时,它扫描以 CEd 开头的所有 DLL 文件的工作目录。

当它找到一个,

就将它装载下来;然后它使用 GetProcAddress 的定位 DLL 中的 CEEntry 函数,从而验证

了你遵循所有必要的规则来创建一个加载项是必要的。

创建并加载加载项的这个方法是

非常沉重的负担,因为它负担更多比核查必要的代码编辑器的责任。

如果接口是在这种

情况下使用的,你的 DLL 加载项可以运用于一个接口,从而保证所有必要的方法,属性

和事件出现在 DLL 中,并作为文件指定的函数运行。

10 属性

属性声明你的类的 CLR 的附加信息。

在过去,如果你想使你的类自描述,你必须采

取断开的方法,其中的文件被存储在外部文件中,如 IDL 甚至 HTML 文件。

通过你这个

开发者的努力,属性解决了这个问题,它在类中约束了任何种类的信息。

例如,你可以

5

 

使用一个属性在一个类中嵌入文档的信息。

属性同样可以用于在类中约束运行时间,定

义使用时应该如何行动。

可能性是无穷的,这就是为什么微软会在.NET Framework 中包

含许多预定义的属性的原因。

11 编译 C#

C#代码通过 C#编译器运行生成两类重要信息:

代码和源数据。

接下来的部分描述了

这两个项目,完成了建立在.NET 代码上的二进制的审查,那就是汇编。

12 Microsoft 中间语言(MSIL)

被 C#编译器输出的代码是写在一种叫做微软中间语言中的,或者称为 MSIL 语言。

MSIL 是由一组特定的指定你的代码应该如何执行的指令组成的。

它包含了操作的说明,

如,变量的初始化操作的说明,调用对象的方法和错误处理,这里仅举几例。

 C#是不是

在编译过程中的源代码更改成 MSIL 的唯一语言。

所有.NET 兼容的语言,包括 Visual

Basic.NET 和 C++,当它们的源代码编译完成后都会产生 MSIL。

因为所有的.NET 语言

编译器有相同的 MSIL 指令集,所有的.NET 语言都有相同的运行时间,所以不同的语言,

不同的编译器代码,可以很容易地一起工作。

对于物理 CPU 而言,MISL 并不是一套明确的指令。

因此它不知道任何关于你机器

CPU 的事,同样的你的机器也不知道任何有关 MSIL 的事。

那么,当你的 CPU 不能读取

MSIL 的时候,你的代码将如何运作呢?

答案是,当代码在第一次运行时,MSIL 代码被

转入了 CPU 说明代码中。

这一过程被称为“刚好及时”编译或 JIT。

JIT 编译器的工作

是将你的通用 MSIL 代码翻译成可由你的 CPU 执行的机器代码。

你可能会想知道在进程中一个额外的步骤是什么样的。

为什么产生 MSIL 时,编译器

可以直接生成 CPU 特定的代码?

总之,编译器在之后做了这些。

有一下几个原因。

首先,

MSIL 使你的编译后的代码可以很容易地转移到不同的硬件上。

假设你已经写了一些 C#

代码,并且你想让它在你的台式机和手提设备上都可以运行,这两个设备很可能有不同

类型的 CPU。

如果你只有一个针对特定 CPU 的 C#编译器,那么你需要两个 C#编译器:

一个针对台式机的 CPU,另一种是针对手提设备的 CPU。

你必须编译两次代码,以确保

你把正确的代码运行在正确的设备上。

有了 MSIL,你只需要编译一次。

你的台式机上安

装了.NET Framework,它包括的 JIT 编译器用来翻译成 MSIL 中台式机 CPU 的特定代码。

在手提设备上安装了.NET Framework,它包括的 JIT 编译器用来翻译同样 MSIL 中针对手

提设备 CPU 的特定代码。

你现在有一个单一的 MSIL 代码库,可以在具有.NET JIT 编译

器的任何设备上运行。

该设备上的 JIT 编译器能保证使你的代码很好地运行。

6

 

编译器使用 MSIL 的另外一个原因是,该指令集可以由一个验证进程很容易地读出。

JIT 编译器的部分工作是核实你的代码,以确保它能够尽可能的清晰。

验证进程可确保你

的代码正确地访问内存,并且调用期望特定类型的方法时,它使用了正确的变量类型。

这些检查确保你的代码不执行任何会使代码崩溃的指令。

MSIL 指令集是为了使这个验证

过程相对简单。

具体的 CPU 指令集的代码,是为了快速执行代码而优化的,但它们产生

的代码是很难阅读的,因此难以核实。

有一个可以立刻输出 CPU 特定代码的 C#编译器能

够使代码的检查很困难或者甚至不可能实现。

允许在.NET Framework JIT 编译器来验证你

的代码,确保你的代码通过一个漏洞很大的路径访问内存并且变量类型会被正确地使用。

 

13 源数据

编译过程还输出源数据,这是.NET 代码分享代码部分一个很重要的内容。

无论你使

用 C#来构建一个客户端的应用程序,还是用 C#建一个类库被别人用在应用程序上的类库,

你都会想利用一些已经编译好的.NET 代码。

该代码可以由微软的.NET Framework 的一部

分来提供,或者它可以通过在因特网上的用户提供。

使用外部代码的关键是让 C#编译器

知道什么类和变量在其他的代码库,以使它可以匹配你正在使用的预编译的代码库中找

到的你正在编写的代码的源代码。

对于你的编译代码而言,源数据可以看成是“目录”。

C#编译器编译的代码与源数据

生成的 MSIL 放在一起。

这个源数据准确地描述你所编写的类,以及它们是如何构成的。

所有类的方法和变量的类型完全地在源数据中被描述,准备好被其他应用程序来读取。

例如,Visual Basic .NET 可以.NET 库中读取源数据来提供对一个特定的类列出所有,可

用于特定类方法的智能感知能力。

如果你曾经使用 COM(组件对象模型)工作,你可能已经熟悉了类型库。

类型库的

目的是为 COM 对象提供类似功能的“目录”。

然而,类型库有一定的局限性,事实上并

不是所有的关于目标的数据都能被放入类型库中。

.NET 中的源数据没有这个缺点,所有

的用来描述类的信息的代码被放置在源数据中。

你可以把源数据看作是具有所有 COM 类

型库的好处。

14 构件

有时候,你会使用 C#来构建一个终端的应用程序。

这些应用程序打包为扩展名为.

exe 的可执行文件。

Windows 也都是以.exe 文件来运行一个应用程序的,并且 C#完全支

持创建.exe 文件。

7

 

但是,也会有几次你不希望建立一个完整的应用程序。

相反,你可能想要建立一个

可以被其他人使用的代码库。

你可能还需要在 C#中建立的一些实用工具类,例如,传给

一个想要在 Visual Basic.NET 应用程序中使用你的类的 Visual Basic.NET 的开发者。

在这

种情况下,你将不会构建一个完整的应用程序,取而代之的是建立一个构件。

构件是一个源数据的代码包。

当你在一个构件中部署一组类时,你会把这个构件当

作一个单元来配置,且这些类将会分享同样层级的版本控制,安全信息和动态需求,将

构件看作一个“逻辑的 DLL”。

如果你熟悉 Microsoft Transaction Server 或 COM+,那么

你可以把构件看作与.NET 等价的包。

有两种类型的构件:

私人构件和全局构件。

当你建立你的构件,无论你想建立一个

私有或全局构件都不需要指明。

但当你部署组件时的区别是显而易见的。

使用私有构件

时,你只能使你的代码被单独的应用程序访问。

你的构件是一个类似于 DLL 的包,并且

当你的应用程序运行它时,被安装进同样的目录。

展开这个私有构件时,可以使你的代

码的唯一应用程序是在同一目录下组件的可执行文件。

如果你想要在更多的应用程序中分享你的代码,你或许要考虑将你的代码配置成为

一个全局的构件。

全局构建可在任何系统上的.NET 应用程序使用,并且不区分安装它的

目录。

微软将构件作为.NET 框架的一部分,并且每个微软构件被安装为一个全局构件。

.NET 结构在一个被称作全局构件存储器的设备中包含了一个全局构件的列表,。

并且微软.

NET 框架 SDK 中包含了公用的可以从全局构件存储器中安装和删除构件的功能。

在某种意义上,C#可以看作是.NET 面向 Windows 环境的一种编程语言。

在过去的十

几年里,Microsoft 给 Windows 和 Windows API 添加了许多功能,Visual Basic 和 C++也

经历了许多变化。

尽管 Visual Basic 和 C++已经成为了非常强大的语言,但这两种语言也

存在问题,因为它们保留了原来的一些内容。

在 Visual Basic 6 和更早的版本中,它的主要优点是很容易理解,许多编程工作都很

容易完成,基本上隐藏了 WindowsAPI 和 COM 组件结构的内涵。

这样做的缺点是,

Visual Basic 中从来没有真正面向对象,这样,大型的应用程序很快会变得杂乱无章,难

以维护。

除了这一点,因为 VisualBasic 语法是从 BASIC(BASIC 主要是为了让初级程

序员更容易理解,而不是为了编写大型商业应用程序)的早期版本继承来的,所以不能

真正成为结构化或面向对象的编程语言。

另一方面,C++在 ANSIC++语言定义中有其自己的根。

它与 ANSI 不完全兼容,因

为 Microsoft 是在 ANSI 定义标准化之前编写 C++编译器的,但已经相当接近了。

遗憾的

是,这导致了两个问题。

首先,ANSI C++是在十几年前的技术条件下开发的,因此不支

持现在的概念(例如 Unicode 字符串和生成 XML 文档),某些古老的语法结构是为以前

的编译器设计的(例如成员函数的声明和定义是分开的)。

其次,微软一直试图演变 C++

8

 

成为专在 Windows 上的高性能任务的语言,以达到在语言中避免添加大量 Microsoft 专用

的关键字和各种库的目的。

其结果是,在 Windows 中,该语言已经变得一塌糊涂。

只要

问问 C++开发人员字符串有多少个定义方式,就可以说明这一点:

char*、LPTSTR、string、CString(MFC版本)、CString(WTL版本)、wchar_t*和

OLECHAR*等。

现在进入.NET 时代——一种全新的环境,它对这两种语言都进行了新的扩展。

Microsoft 给 C++添加了许多 Microsoft 专用的关键字,并把 VB 演变为 VB.NET,保留了

一些基本的 VB 语法,但在设计上完全不同,从实际应用的角度来看,VB.NET 是一种新

语言。

在这种情况下,Microsoft 决定给开发人员另一个选择——专门用于.NET、具有新

起点的语言, 即 Visual C# .NET。

据官方介绍,微软将 C#定义为一个“从 C 和 C ++衍

生的简单的、现代的、面向对象的和类型安全的编程语言。

”大多数独立评论员可能会更

改为“从 C,C++和 Java 的。

”这样的描述在技术上是准确的,但没有涉及到该语言的真

正优点。

在语法上,C#是非常类似 C++和 Java 的,很多关键字都是一样的,C#也使用

类似于 C++和 Java 的块结构,并用括号({})来标记代码块,用分号分隔各行语句。

段我们对 C#代码的第一印象是,它看起来很像 C++或 Java 代码。

但在这些表面上的类似

性的背后,C#是一个比 C++更容易学习,但比 Java 难一些。

它的设计比这两个语言更

加符合现代开发工具,同时具有 Visual Basic 的易用性、高性能以及 C++的低级内存访问

性。

C#包括以下一些特性:

❑完全支持类和面向对象编程,包括接口和继承、虚函数和运算符重载的处理。

❑定义完整、一致的基本类型集。

❑对自动生成 XML 文档说明的内置支持。

❑对动态分配的内存进行自动清除。

❑可以用用户定义的特性来标记类或方法。

这可以用于文档说明,对编译有一定的

影响(例如,把方法标记为只在调试时编译)。

❑对.NET 基类库的完全访问权,并易于访问 Windows API(在你真的需要它,并不

是所有的时候)。

❑如果需要,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2