C# 编程基础练习题与答案2

更新时间:2023-05-19 15:57:30 阅读: 评论:0

1.面向对象的思想主要包括什么?
答:个人认为一各程序语言要成为真正的面向对象的程序设计语言,它必须符合下列条件:
  1抽象(abstraction)抽象能够有效地管理一个问题的复杂性,其作法是划分出与该问题相关的一组对象.
  2 封装(Encapsulation)封装是指将一个抽象的内部实现隐藏在特定的对象之内.
  3 多态(polymorphism)多态会提供相同方法的多种操作方法的多种操作实作.例如,不同的对象都会拥有一个Save方法,但是每一个Save方法会执行不同的操作.
  4 继承(inheritance)Visual C# 2005 最令人兴奋之处就是其继承特性.v c#2005则提供了真正的方法继承,因此您可以重复使用一个类的实例.
2.什么是中的用户控件
自己动手作自己的控件来取代提供的控件。这种控件就是用户控缀为.ascx
3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?什么是多态? CTS、CLS和CLR分别作何解释?
应用程序域:应用程序域(通常是 AppDomain)是用于隔离应用程序的虚拟进程。在同一个应用程序作用域中创建的所有对象(换句话说,从该应用程序的入口点开始沿着对象激活序列的任何地方)都在同一个应用程序域中创建。多个应用程序域可以存在于一个操作系统进程中,使它们成为隔离应用程序的简便方式。 操作系统进程通过使用各不相同的内存地址空间来提供隔离。尽管它是有效的,但也是代价昂贵的,并且不能达到大型 Web 服务器所需要的数量。与其相比,公共语言运行时通过管理在应用程序域中运行的代码的内存使用来强制进行应用程序隔离。这样就确保它不会访问应用程序域以外的内存。需要注意的是,只有类型安全的代码才能以这种方式管理(当在应用程序域中加载不安全代码时,运行时不能保证隔离)。
经典英文名理解应用程序域:
应用程序域是 运行库的逻辑进程表示,操作系统进程可以包含多个应用程序域。应用程序域具有下列优点:
1、隐藏了进程具体的操作系统信息。从而允许把 放在不同的操作系统下。
2、提供了隔离。即使运行在同一个进程中的属于不同域的应用程序也不能直接共享全局数据、静态数据或其他资源。所以,一个应用程序域失败了,也不会影响到同一个进程中的其他应用程序域。
3、对于不需要昂贵的 IPC 机制的进程,应用程序域允许 运行库优化运行在这种进程中的应用程序间的通信。
因为应用程序域是被隔离的,所有 对象都会被界定在创建它的应用程序域内。如果跨应用程序域的边界传递对象引用,该被引用对象就被称为远程对象。
装箱和拆箱
C#中的有两种类型的变量:值类型和引用类型。当值类型和引用类型相互转化时,会发生装箱和拆箱的过程。这里有一点要声明:经过拆箱或装箱的对象会多出它自己一份拷贝。它和它的拷贝不在一个存储区域。这也是值类型和引用类型的区别所在。值类型总是在栈中,而引用类型总是在托管堆中。(目前J2SE5.0也支持了装箱和拆箱,但是我目前
不知道是否和C#一样)。为了进一步理解看下面例子:
struct Point{
  public int x;
  public int y;
}
static void Main(){
    Point p;
    p.x=10;
    p.y=20;
  Object o=p;//box. 将值类型从栈中拷贝到堆中。
  /************************************************************************/
    * 从托管堆中将对象拷贝到栈中。
  /************************************************************************/
  Point p2=(Point)p;
  Console.WriteLine(“p2.x:="+p2.x+  “      p2.y:=“+p2.x);
  p.x=16;
  p.y=34;
  Console.WriteLine(“p2.x:="+p2.x+  “      p2.y:=“+p2.x);
  Console.WriteLine(“p.x:="+p.x+  “      p.y:=“+p.x);
}
输出结果为:
p2.x:=10;p2.y=20;
p2.x:=10;p2.y=20;
p.x:=16;p.y=34;
可知,变量经过拆箱/装箱后,得到是自己的另一份拷贝。
specialists装箱和取消装箱的概念是  C#  的类型系统的核心。它在值类型引用类型之间的架起了一座桥梁,使得任何值类型的值都可以转换为  object  类型的值,反过来转换也可以。装箱和取消装箱使我们能够统一地来考察类型系统,其中任何类型的值最终都可以按对象处理
多态
一.形象理解
两条理解的原则:
1)一个派生类对象可以被声明成一个基类,或者是一个基类指针可以指向一个派生类对象:
//c++ code
BaClass *p;
DerivedClass obj;
p = &obj;
//C# code
BaClass obj = new DerivedClass();
2)把一个对象看做是一个独立的个体,调用对象的public成员函数实际上是给这个对象发送一个消息,采取什么样的动作完全由对象自己决定。
Shape是基类,CircleLine是从Shape继承出来的,Shapedraw()方法,CircleLine分别自己定义了自己的draw()方法,在下面的代码里:
// Java Code
static void func(Shape s)
{
s.Draw();
}
如果发生了这样的调用:
Line l = new Line();
Circle c = new Circle();
func(l);
func( c);
一个Circle和一个Line被当做Shape传到函数里去了,然后调用Draw(),会发生什么情况?因为对象是独立的个体,在func()里,这两个对象被分别传递了Draw()消息,叫它们绘制自
己吧,于是他们分别调用了自己类里定义的morninggloryDraw()动作。
通过这两条原则我们可以理解上面的多态。正是由于多态,使得我们不必要这样去做:
IF 你是一个Circle THEN 调用CircleDraw()
ELSE IF 你是一个Line THEN 调用LineDraw()
ELSE
我们只要给这个被声明成为Shape的对象发送Draw消息,怎么样去Draw就由对象自己去决定了。
二.一切皆因虚函数
先看看实现多态的基本条件:
bulletedlist
1plant是什么意思      基类含有虚函数
2zaixiancidian      继承类把这个虚函数重新实现了
3      继承类也可能没有重新实现基类的所有虚函数,因此对于这些没有被重新实现的虚函数不能发生多态。
再看一下几种语言里一些特别的规定:
1arthur.  C++
1)虚函数用virtual关键字声明。
2virtual void Func(para_list) = 0;这样的虚函数叫做纯虚函数,表示这个函数没有具体实现。包含纯虚函数的类叫做抽象类,如果他的继承类没有对这个纯虚函数具体用代码实现,则这个继承类也是抽象类。抽象类不能被实例话(就是说不能创建出对象)。
3)继承类重新实现基类的虚函数时,不需要做任何特别的声明。
4)如果不用virtual关键字修饰,并且在派生类里重新实现了这个方法,这仅仅是一个简单的覆盖,不会发生多态,我们暂称它非多态吧。
韩语发音词典2  Java
1Java没有virtualthe color of the night关键字,Java把一切类的方法都认为是虚函数。
hammerhead(2)继承类重新实现基类的虚函数时,不需要做任何特别的声明。因此在Java里只要重新实现了基类的方法,并且把继承类对象声明为基类,多态就要发生。因此Java对多态的条件相对是比较低的。

本文发布于:2023-05-19 15:57:30,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/696260.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   应用程序   类型   函数   进程   实现   装箱
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图