C# 编程基础练习题与答案 下载本文

内容发布更新时间 : 2024/5/24 19:42:37星期一 下面是文章的全部内容请认真阅读。

1.面向对象的思想主要包括什么?

答:个人认为一各程序语言要成为真正的面向对象的程序设计语言,它必须符合下列条件: 1抽象(abstraction)—抽象能够有效地管理一个问题的复杂性,其作法是划分出与该问题相关的一组对象.

2 封装(Encapsulation)—封装是指将一个抽象的内部实现隐藏在特定的对象之内. 3 多态(polymorphism)—多态会提供相同方法的多种操作方法的多种操作实作.例如,不同的对象都会拥有一个Save方法,但是每一个Save方法会执行不同的操作.

4 继承(inheritance)—Visual C# 2005 最令人兴奋之处就是其继承特性.v c#2005则提供了真正的方法继承,因此您可以重复使用一个类的实例. 2.什么是中的用户控件

自己动手作自己的控件来取代.NET提供的控件。这种控件就是用户控件。后缀为.ascx

3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?什么是多态? CTS、CLS和CLR分别作何解释?

应用程序域:应用程序域(通常是 AppDomain)是用于隔离应用程序的虚拟进程。在同一个应用程序作用域中创建的所有对象(换句话说,从该应用程序的入口点开始沿着对象激活序列的任何地方)都在同一个应用程序域中创建。多个应用程序域可以存在于一个操作系统进程中,使它们成为隔离应用程序的简便方式。 操作系统进程通过使用各不相同的内存地址空间来提供隔离。尽管它是有效的,但也是代价昂贵的,并且不能达到大型 Web 服务器所需要的数量。与其相比,公共语言运行时通过管理在应用程序域中运行的代码的内存使用来强制进行应用程序隔离。这样就确保它不会访问应用程序域以外的内存。需要注意的是,只有类型安全的代码才能以这种方式管理(当在应用程序域中加载不安全代码时,运行时不能保证隔离)。

理解应用程序域:

应用程序域是.NET 运行库的逻辑进程表示,操作系统进程可以包含多个应用程序域。应用程序域具有下列优点:

1、隐藏了进程具体的操作系统信息。从而允许把.NET 放在不同的操作系统下。

2、提供了隔离。即使运行在同一个进程中的属于不同域的应用程序也不能直接共享全局数据、静态数据或其他资源。所以,一个应用程序域失败了,也不会影响到同一个进程中的其他应用程序域。

3、对于不需要昂贵的 IPC 机制的进程,应用程序域允许 .NET 运行库优化运行在这种进程中的应用程序间的通信。

因为应用程序域是被隔离的,所有.NET 对象都会被界定在创建它的应用程序域内。如果跨应用程序域的边界传递对象引用,该被引用对象就被称为远程对象。

装箱和拆箱

在C#中的有两种类型的变量:值类型和引用类型。当值类型和引用类型相互转化时,会发生装箱和拆箱的过程。这里有一点要声明:经过拆箱或装箱的对象会多出它自己一份拷贝。它和它的拷贝不在一个存储区域。这也是值类型和引用类型的区别所在。值类型总是在栈中,而引用类型总是在托管堆中。(目前也支持了装箱和拆箱,但是我目前不知道是否和C#一样)。为了进一步理解看下面例子: struct Point{ public int x; public int y; }

static void Main(){ Point p; =10; =20;

Object o=p;将值类型从栈中拷贝到堆中。

/************************************************************************/ * 从托管堆中将对象拷贝到栈中。

/************************************************************************/ Point p2=(Point)p; (“:=\ =16; =34;

(“:=\ (“:=\ }

输出结果为: :=10;=20; :=10;=20; :=16;=34;

可知,变量经过拆箱/装箱后,得到是自己的另一份拷贝。

装箱和取消装箱的概念是 C# 的类型系统的核心。它在“值类型”和“引用类型”之间的架起了一座桥梁,使得任何“值类型”的值都可以转换为 object 类型的值,反过来转换也可以。装箱和取消装箱使我们能够统一地来考察类型系统,其中任何类型的值最终都可以按对象处理

多态

一.形象理解 两条理解的原则:

(1)一个派生类对象可以被声明成一个基类,或者是一个基类指针可以指向一个派生类对象: MainMainET结合Java和COM解决方案两者优点来解决互操作性问题。类似于COM定义的标准二

进制格式,.NET定义了一个称为通用类型系统Common Type System(CTS)的类型标准。这个类型系统不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展。任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。例如,用户能够在中派生一个由C#编写的类。

很显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,一些语言支持无符号数据类型,一些语言支持运算符重载。用户应认识到这一点,因此.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。

CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如设计的.NET组件实现互操作。这里用的是“可能不”,而不是“不可能”,因为这一问题实际依赖于对non-CLS-compliant项的可见性。事实上,CLS规则只适用于或部分适用于那些与其他组件存在联系的组件中的类型。实际上,用户能够安全实现含私有组件的项目,而该组件使用了用户所选择使用的.NET语言的全部功能,且无需遵守CLS的规范。另一方面,如果用户需要.NET语言的互操作性,那么用户的组件中的公共项必须完全符合CLS规范。让我们来看下面的C#代码: public class Foo {

private uint A = 4; public uint B = 5; public long GetA() { return A; } }

最后一个C是公共语言运行库Common Language Runtime(CLR)。简单地说,CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收和安