C语言基础测试题答案.pdf_第1页
C语言基础测试题答案.pdf_第2页
C语言基础测试题答案.pdf_第3页
C语言基础测试题答案.pdf_第4页
C语言基础测试题答案.pdf_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#基础测试题答案基础测试题答案 1、 public 关键字是类型和类型成员的访问修饰符。 公共访问是允许的最高访问级别, 对访问公 共成员没有限制。 protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访 问。 private 关键字是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在 声明它们的类和结构体中才是可访问的。 internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或 成员才是可访问的。 2. String 是不可变的对象,因此在每次对 String 类型进行改变的时候其实都等同于生成了一 个新的 String 对象,然后将指针指向新的 String 对象。 StringBuilder 类就不一样了,每次结果都会对 StringBuilder 对象本身进行操作,而不是生成 新的对象,再改变对象引用。 3. stringstr= “ “,表示一个空串,被实列化了,占用了内存空间, stringstr=null,表示一个空引用,没有占用了空间, 4. 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象 类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何 实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方 法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 二、接口: 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方 法包括其他成员); 另外,接口有如下特性: 接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公 有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态 成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 三、抽象类和接口的区别: 1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接 口只是一个行为的规范或规定,微软的自定义接口总是后带 able 字段,证明其是表述一类 类“我能做。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏 松但都实现某一功能的类中. 2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法; 3.一个类一次可以实现若干个接口,但是只能扩展一个父类 4.接口可以用于支持回调,而继承并不具备这个特点. 5.抽象类不能被密封。 6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的, 当然您也可以声明为虚的. 7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成 员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。 8.抽象类实现了 oop 中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义 为不可变的,而把可变的座位子类去实现。 9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果 一个类只是实现了这个接口的中一个功能, 而不得不去实现接口中的其他方法, 就叫接口污 染。 10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层 次增多, 造成最直接的后果就是当你调用这个类群中某一类, 就必须把他们全部加载到栈中! 后果可想而知.(结合堆栈原理理解)。同时,有心的朋友可以留意到微软在构建一个类时, 很多时候用到了对象组合的方法。比如 中,Page 类,有 Server Request 等属性,但 其实他们都是某个类的对象。使用 Page 类的这个对象来调用另外的类的方法和属性,这个 是非常基本的一个设计原则。 11.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现, 而在抽象类的子类中实现接口中方法. 四、抽象类和接口的使用: 1. 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件 版本。 2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的 功能块,则使用接口。 3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实 现功能,则使用抽象类。 4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。 5. 重载、重写和隐藏的定义: 重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列 表不同。 这样才能通过传递不同的参数来决定到底调用哪一个。 而返回值类型不同是不能构 成重载的。 重写: 继承时发生, 在子类中重新定义父类中的方法, 子类中的方法和父类的方法是一样的 例如:基类方法声明为 virtual(虚方法),派生类中使用 override 申明此方法的重写. 隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用 new 声明此方法的隐藏。 重载时,根据参数选择调用的方法; 重写时,访问父类子类皆调用子类的重写方法; 隐藏时,访问父类则调用父类的方法,子类子类的方法。 补充:重写 override 一般用于接口实现和继承类的方法改写,要注意 1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果; 2、覆盖的方法的返回值必须和被覆盖的方法的返回一致; 3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类; 4、被覆盖的方法不能为 private,否则在其子类中只是新定义了一个方法,并没有对其进 行覆盖。 6. 装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型 注:被装过箱的对象才能被拆箱 装箱:用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现 的任何接口类型的隐式转换。 拆箱:从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。 7. 受管制代码:在 .net 中,由公共语言运行环境进行管理的代码,它主要负责内存管理。 非托管代码:在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须 提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运 行库中获得这些服务。 托管代码:由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程 序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些 服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。 8. 构造器 Constructor 不能被继承,因此不能重写 Overriding,但可以被重载 Overloading。 9. 能,不能, 因为静态方法在类加载的时候就初始化了, 而非静态的成员变量不一定已初始化, 而且即便 是初始化了,静态方法也不知道该访问哪个实例的变量。 类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接 去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实 例)时才会分配内存,然后通过类的对象(实例)去访问。 10. 在 switch(exp)中,exp 只能是一个整数表达式或者枚举常量(javase5),整数表达式可以是 int 基本类型或 Integer 包装类型,由于 byte,short,char 都可以隐含转换为 int,所以这些类型以 及这些类型的包装类型也是可以的。显然 long 和 String 类型都不符合 switch 语法的规定, 并且不能隐式的转换成 int 类型,所以它们不能作用于 switch 语句中,此时只能只能使用一 系列的 if 等语句了。 11. 抽象方法不可以是 static 的因为 static 的方法不会被继承。 12. 数组中没有 length()这个方法,但是数组中有 length 这个属性。用来表示数组的长度。 String 中没有 length()这个方法。用来得到字符串的长度。 13、 在 vs 中运行下可知:无法将类型“int”隐式转换为“short” 。存在一个显式转换(是否缺少 强制转换?) 14、 const 成员都是 static 所以应该去掉 static 15、 在 vs 中运行下可知: 13,10 16、 是 2 个。 一个是编译时决定的,最后放在常量池中。一个是运行时放在堆里面的。两个都是“xyz“。s 只是一个引用,本身不是对象。 17、 sealed 修饰符表示密封 用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义 上互相排斥 用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用, 因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员 通常用于实现第三方类库时不想被客户端继承, 或用于没有必要再继承的类以防止滥用继承 造成层次结构体系混乱 恰当的利用 sealed 修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员 18、 const: 用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序 static readonly: 用 static readonly 修饰符声明的成员依然是变量, 只不过具有和常量类似的使 用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初 始化。 const 和 static readonly 的确非常像:通过类名而不是对象名进行访问,在程式中只读等等。 在多数情况下能混用。 辅助:二者本质的差别在于,const 的值是在编译期间确定的,因此只能在声明时通过常量 表达式指定其值。而 static readonly 是在运行时计算出其值的,所以还能通过静态构造函数 来赋值。 19、 this:引用总是指向调用成员方法的对象本身。 20、 ArrayListarraylist=newArrayList(); for(int i=0;i 0) return 1; else return 0; class Rectangle : Shape public override void calculatearea() while (true) try Console.WriteLine(“请输入长:“); double a = Convert.ToDouble(Console.ReadLine(); Console.WriteLine(“请输入宽:“); double b = Convert.ToDouble(Console.ReadLine(); if (check(a,b) = 1) Console.WriteLine(“边长为0,1的矩形,面积2“, a,b, a*b); break; else throw new Exception(); catch (Exception ) Console.WriteLine(“输入不合法!“); publicint check(double a,double b) if (a 0 else return 0; class Triangle : Shape public override void calculatearea() while (true) try Console.WriteLine(“请输入第一条边:“); double a = Convert.ToDouble(Console.ReadLine(); Console.WriteLine(“请输入第二条边:“); double b = Convert.ToDouble(Console.ReadLine(); Console.WriteLine(“请输入第三条边:“); double c = Convert.ToDouble(Console.ReadLine(); if (check(a,b,c) = 1) do

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论