DotNetFramework大学题库 - 图文(7)

2019-02-21 00:30

.NET Framework 2.0 程序设计

[VB.NET]

Imports System

Public Class Employee Private _name As String Private _married As Boolean

Private _mAnniversary As Nullable(Of DateTime)

Public Sub New(ByVal name As String, ByVal married As Boolean) Me._name = name Me._married = married End Sub

Public Property Anniversary() As Nullable(Of DateTime) Get

Return Me._mAnniversary End Get

Set(ByVal value As Nullable(Of DateTime)) If Me._married Then

Me._mAnniversary = value Else

Me._mAnniversary = Nothing End If End Set End Property

Public Sub ShowDetails() Console.WriteLine()

Console.WriteLine(\

Console.WriteLine(\ If Me._mAnniversary.HasValue Then

Console.WriteLine(\ Else

Console.WriteLine(\ End If End Sub

Public Shared Sub Main()

Dim e1 As New Employee(\

e1.Anniversary = DateTime.Today.AddMonths(-5) e1.ShowDetails()

Dim e2 As New Employee(\

e2.Anniversary = DateTime.Today.AddMonths(-10)

22

第2章 公共语言运行库和类型

e2.ShowDetails() Console.ReadLine() End Sub End Class

2.5 小结

本章我们主要学习了公共语言运行库的相关知识。公共语言类型库的核心是通用类型系统。通用类型系统中的类型可分为两类:值类型和引用类型。他们可以通过装箱操作和拆箱操作相互转换。.NET Framework2.0引入了泛型,它是一种十分有用的类型,需要好好掌握。

2.6 实验 2.7 习题

1. 在托管环境下(多选):

A.系统自动提供诸如垃圾回收、安全性等通用服务 B.如果需要,开发人员都可以关闭代码安全验证功能 C.如果需要,垃圾回收可以手动进行 D.开发者不能跟踪代码的执行 E.运行时,代码与类库是独立的 2. 分别列举几个值类型和引用类型,并谈谈两者的区别。

3. C#中的float类型和VB.NET中的Single类型对应.NET 类库中的()

A.System.Single B.System.Double C.System.Int32 D.System.Int64 4. 下列哪个是取消装箱操作()

A. [C#] int x=5; Object o=x; [VB.NET]

Dim x As Integer = 5 Dim o As Object = x B. [C#] int x=5;

Console.WriteLine(“The answer is:{0}”,x); [VB.NET]

Dim x As Integer = 5

23

.NET Framework 2.0 程序设计

Console.WriteLine(“The answer is:{0}”,x) C. [C#] int x=5; Object o=x; int y = (int )o; [VB.NET]

Dim x As Integer = 5 Dim o As Object = x

Dim y As Integer = CType(o, Integer) D. [C#] short s=5; Object o=s; [VB.NET]

Dim s As Short = 5 Dim o As Object = s

5. 以下哪种情况需要使用显示转换()

A.long 型向int型的转换 B.int 型到 long 值的转换 C.基类型向派生类型的转换 D.int 型到 float 值的转换

6. 对于以下语句,下列选项中哪个是正确的?( )

[C#]

long y=123456789; short x=y; A.无法通过编译

B.可以通过编译,但运行时出错 C.可以正常编和运行 7. 对于以下语句,下列选项中哪个是正确的?( )

[VB.NET]

Dim y as Long = 123456789 Dim x as Short = y A.无法通过编译

B.可以通过编译,但运行时出错 C.可以正常编和运行 8. 谈谈你对泛型的理解,并说明他的优点。

24

第3章 托管代码的编译和执行

作为程序开发人员,我们知道计算机本身只能理解0,1的二进制信息。而我们使用的是高级编程语言,高级编程语言需要被编译成二进制代码才能为计算机执行。那.NET Framework程序是如何被计算机理解和运行的呢?在这一章里,我们将详细学习托管代码的编译流程,以及托管代码是如何执行的。通过对这章的学习,我们能对.NET Framework有更深入的了解。学习完本章内容后,你将能够:

? 了解托管代码的编译原理 ? 了解托管代码的执行原理

3.1 编译和执行概述

图 3-1 编译和执行

图 3-1为我们演示了.NET Framework中托管代码编译和执行的流程。C#和VB.NET的代码首先被编译为Microsoft中间语言(MSIL)储存在本地。当需要运行这些托管代码时,CLR又对MSIL进行了第二次编译(Just in time,JIT编译),将MSIL代码转换成本机代码(本机代码是针对当前CPU的可执行二进制代码)。

从高级语言编译为公共中间语言的概念是现代编译器技术的主要特征。即使在 .NET 之前,Visual Studio 2005中的编译器就已经将各种编程语言转换为相同的中间语言,然后使用公共后端将其编译为二进制代码。这种二进制代码针对特定的CPU,只能在兼容的CPU上运行。在.NET Framework出现之前,这些二进制代码就是安装在用户机器上的程序。

对于 .NET Framework 应用程序,安装在用户机器上的程序并不是针对特定的CPU二进制代码。相反,复制到本地的内容是此应用程序的 MSIL,一种类似于以前隐藏在编译器内部的中间语言的代码。为何要进行这种变化? 将代码作为 MSIL 进行分发有何好处?

.NET Framework 2.0 程序设计

很明显,这么做可以实现可移植性。.NET Framework 的核心并不需要在特定的操作系统和CPU上运行,也就是说它可以在非 Windows 操作系统和非 Intel 处理器的系统上运行。但是,客观地说,.NET Framework基本上仍然是侧重于Windows的技术,因此可移植性不是MSIL的主要目的。

可移植性不是使用中间语言的唯一好处。与二进制代码不同,二进制代码可以引用任意内存地址,而MSIL代码在加载到内存中时将受到针对类型安全性的检验。这实现了更好的安全性和更高的可靠性,因为某些类型的错误以及大量可能的攻击将变为不可能。

使用中间语言的可能会导致代码变慢。但由于MSIL总是在执行之前编译而不是解释(这将在后面说明),因此这在大多数情况下不会成为问题。而且即便如此,硬件速度正在不断提高。如果程序现在很慢,那么请稍等一段时间。它们在一到两年内就会变得足够快。

3.2 编译托管代码

基于CLR的语言编写的源代码在编译时,将生成两种内容:以MSIL表示的指令和元数据(Metadata),元数据是有关这些指令及其所处理数据的信息。无论代码最初是用 C#、VB.NET还是某种其他基于CLR的语言编写的,编译器都会把代码中所包含的所有类型转换为MSIL和元数据,包括类、结构、整数、委托以及所有其他内容。

图 3-2演示了这一过程。 此示例中,要编译的代码包含三个 CTS 类型,它们全部都是类。当使用适合的编译器编译此代码时,得到的结果是对应于每个类的等效 MSIL 代码集以及描述这些类的元数据。MSIL 和元数据都存储在标准 Windows 可移植可执行(PE)文件中。此文件可以是DLL或EXE,常见术语“模块”用于指代两者。本节进一步讨论 MSIL 和元数据。

图 3-2 编译以任何语言编写的托管代码将生成 MSIL 以及描述该 MSIL 的元数据

26


DotNetFramework大学题库 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:胸怀天下事 满耳读书声 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: