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参数显示传递到方法

outref都是引用传递,传递后使用都会改变原有的值,引用传递都需要显示传递到方法。

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,属性可以

 

posted @ 2019-09-19 17:38  highlightyys  阅读(26)  评论(0编辑  收藏  举报