C#习题(一)
1.关于C#的委托代理模式,说法正确的是( )
A 委托实际上是一种引用方法的类型 B 一旦程序中为委托分配了方法,委托将和该方法具有相同的行为 C 委托可以是对类的抽象 D 委托的实例代表一个具体的函数或方法
2.下列代码输出为():
class Father{
public void F() {
Console.WriteLine(“A.F”);
}
public virtual void G() {
Console.WriteLine(“A.G”);
}
}
class Son: Father{
new public void F() {
Console.WriteLine(“B.F”);
}
public override void G() {
Console.WriteLine(“B.G”);
}
}
class override_new
{
static void Main() {
Son b = new Son();
Father a = b;
a.F();
b.F();
a.G();
b.G();
}
}
A.F B.F B.G B.G
3.下面不是面向对象的基本原则的是?
A 单一职责原则(Single-Resposibility Principle) B 开放封闭原则(Open-Closed principle)
C 抽象类原则(Abstract-Class principle)D 依赖倒置原则(Dependecy-Inversion Principle)
E 接口隔离原则(Interface-Segregation Principle)
五个基本原则:
单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口
s( Single-Resposibility Principle ): 单一职责原则
o( Open-Closed principle ): 开放封闭原则
l( Liskov-Substituion Principle ): 里氏原则
i( Interface-Segregation Principle ): 接口隔离原则
d( Dependecy-Inversion Principle ): 依赖倒置原则
一个单词:立方体(solid),很好记!!!
注:默认成员变量为private修饰
4.接口是一种引用类型,在接口中可以声明(
方法、属性、索引器和事件
),但不可以声明公有的域或私有的成员变量。
5.异常类对象均为System.Exception类的对象。
6.一个 const 对象只能访问const成员函数
7.TextureBrush类包含在(system.drawing)命名空间中。
8.在C#中,索引器是专门用来访问对象中的数组信息的。//错
索引器为c#程序语言中类的一种成员,它使得对象可以像数组一样被索引,使程序看起来更直观,更容易编写。它可以使得像数组那样对对象使用下标。它提供了通过索引方式方便地访问类的数据信息的方法。 要声明类或结构上的索引器,请使用this关键字,例如: public int this[int index] //声明索引器 { // get and set 访问 }
不仅是数组,你可以在访问器里设置,可以访问类里所有的成员信息。
9.ASP中Session对象默认有效期为多少分钟?20
ASP中默认的时间20分钟
JSP使用TomCat服务器,默认是30分钟
10.以下关于 ref 和 out 描述哪些项是正确的?(ACD)
A 使用ref参数,传递到ref参数的参数必须是最先初始化 B使用out参数,传递到out参数的参数必须最先初始化
C 使用ref参数,必须将参数作为ref参数显式传递到方法 D使用out参数,必须将参数作为out参数显示传递到方法
out
、
ref
都是引用传递,传递后使用都会改变原有的值,引用传递都需要显示传递到方法。
ref
是有进有出,即能将参数传进去,函数里对变量的改变在函数结束时会改变值,因此需要在传递进去前初始化。
out
是只出不进,即将参数传进去时值是无效的,
out
会把参数清空,所以无法将一个值从
out
传递进去。
11.在C#中利用Socket进行网络通信编程的一般步骤是:建立Socket侦听、(建立Socket连接 )、利用Socket接收和发送数据。
12. o.MethodA 调用的是?
using System;
namespace Application
{
abstract class BaseClass
{
public virtual void MethodA()
{
}
public virtual void MethodB()
{
}
}
class Class1: BaseClass
{
public void MethodA(string arg)
{
}
public override void MethodB()
{
}
}
class Class2: Class1
{
new public void MethodB()
{
}
}
class MainClass
{
public static void Main(string[] args)
{
Class2 o = new Class2();
o.MethodA();
}
}
}
BaseClass.MethodA //无参数的MethodA方法
13.
定义以下泛型:
Internal sealed class DictionaryStringKey:Dictionary{}
哪个选项不会抛出异常()
A Type t=typeof(Dictionary<,>); Object o=Activator.CreateInstance(t);
B Type t=typeof(DictionaryStringKey<>); Object o=Activator.CreateInstance(t);
C Type t=typeof(DictionaryStringKey<Guid>); Object o=Activator.CreateInstance(t);
14.下列代码的运行结果是()?
Sub.Func Sub.Func Sub.Func
有子类覆盖的前提下,基类不会再 使用自身的虚方法了。参考Servlet加载器
15.
- 结构可带有方法、字段、索引、属性、运算符方法和事件。
- 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义默认的构造函数。默认的构造函数是自动定义的,且不能被改变。
- 与类不同,结构不能继承其他的结构或类。
- 结构不能作为其他结构或类的基础结构。
- 结构可实现一个或多个接口。
- 结构成员不能指定为 abstract、virtual 或 protected。
- 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
- 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
- 类是引用类型,结构是值类型。
- 结构不支持继承。
- 结构不能声明默认的构造函数。
16.
类定义中可以使用的访问修饰符组合
none or internal 类只能在当前工程中访问
public 类可以在任何地方访问
abstract or internal abstract 类只能在当前工程中访问,不能实例化,只能继承
public abstract 类可以在任何地方访问,不能实例化,只能继承
sealed or internal sealed 类只能在当前工程中访问,不能派生,只能实例化
public sealed 类可以在任何地方访问,不能派生,只能实例化Protected 和 Private 不能被类对象访问
private只能从其所在类里面访问 protect只能从其所在类里面以及所在类的派生类(子类)访问 类的成员变量默认访问符是private
下面介绍一下C#中方法、类等的默认访问修饰符
接口(interface)
接口成员访问修饰符默认为public,且不能显示使用访问修饰符。
类(class)
构造函数默认为public访问修饰符。
析构函数不能显示使用访问修饰符且默认为private访问修饰符。
类的成员默认访问修饰符为private;
枚举(enum)
枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。
结构(struct)
结构成员默认为private修饰符。
结构成员无法声明为protected成员,因为结构不支持继承。
嵌套类型
嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致
17.在C#中,int[][]是定义一个int型的二维数组。//错
数组类型有:一维数组、多维数组( 矩形数组 )和数组的数组(交错数组)
一维数组:
int[] numbers;
多维数组:
string[,] names;
数组的数组(交错的):
byte[][] scores;
18.
索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。
索引器和数组比较:
(1)索引器的索引值(Index) 类型不受限制
(2)索引器允许重载
(3)索引器不是一个变量
索引器和属性比较:
(1)属性以名称来标识,索引器以函数形式标识
(2)索引器可以被重载,属性不可以
(3)索引器不能声明为static,属性可以