《深入.NET平台和C#编程》内部测试题-笔试试卷

一 选择题

1) 以下关于序列化和反序列化的描述错误的是( C)。

a) 序列化是将对象的状态存储到特定存储介质中的过程

b) 二进制格式化器的Serialize()和Deserialize()方法可以分别用来实现序列化和反序列

化过程

解析:BinaryFormatter

c) 如果一个类可序列化,则它的子类和包含的各成员对象也一定可序列化

问题出在了子类,如果子类压根不能进行序列化操作,则会抛出异常

d) 标识一个类可以序列化要使用[Serializable]

2) 在C#中,下列关于简单工厂设计模式的说法不正确的是( A )。

a) 简单工厂产生的对象都是静态对象

对象没有静态和动态之分

b) 创建产品的方法返回类型都是父类

c) 使用该模式解决了代码中大量使用new 的问题

工厂模式:

单例模式

3个:

简单工厂

工厂模式

抽象工厂模式

Public  class Factory

{

Public static Animal CreateProduct(string type)

{

Animal animal=null;

Return animal;

}

}

原则:开闭原则(对修改关闭,对添加开放)

d) 简单工厂的缺点是对修改不封闭,新增加产品就需要修改工厂

3) 下列关于虚方法virtual和抽象方法abstract的描述中错误的是( C)。

a) 虚方法必须有方法体,可以被子类重写

b) 抽象方法不允许有方法体,且必须被子类重写

c) 抽象方法必须在抽象类中,而虚方法可以在所有类中

密封类和静态类中不能书写

d) 在子类中重写抽象方法或虚方法,都需要用override关键字

4) 在UML类图中使用(B )符号表示私有成员。

a) +

b) -

c) *  ~:package

d) #  受保护类型

5) 分析以下使用抽象类的C#代码,其最终的运行结果是D )。

public abstract class Class1

{

public void F()

{

Console.Write("1");

}

abstract public void ABS();

}

public class Class2 : Class1

{

public override void ABS()

{

Console.Write("3");

}

public Class2()

{

Console.Write("2");

}

static void Main()

{

Class2 objB = new Class2();

objB.ABS();

}

}

//先调用构造,然后调用自身的ABS方法()

a) 12

b) 21

c) 13

d) 23

6) 下列代码的运行结果是( A)。

class Test

{

Public  void F()

{

Console.Write("A");

}

}

class B : Test

{

Public  new  void F()

{

Console.Write("B");

}

Public  void Say()

{

}

static void Main()

{

Test objA = new B();

objA.F();

}

}

注意:这里不是多态,所以用父类变量保存子类对象,取的是父类的方法。哪怕父类方法使用Virtual关键字,子类没有Override就不会实现多态。

以后我们碰到通过父类变量保存在对象的题目时,应该具备以下理解能力:

01.当new一个子类的时候,可以看成在子类对象中已经完全包含一个父类对象,所以我们可以在子类中通过this点出来父类的非私有成员。

02.父类变量只能调用到父类的方法,而不能调用子类的方法,即使该父类变量存储是子类。

程序员;编码能力   打字能力。

打字员:打字能力

a) A

b) B

c) BA

d) AB

7) 关于C#中的虚方法,以下说法正确的是(C )。

a) 使用static修饰

b) 可以没有方法体

c) 可以被子类重写

d) 使用abstract修饰

8) 分析如下C#代码,如果输出结果是“Dog Eating......”,下划线需要填写的代码是(B )

    abstract class Animal

{

public __________ void Eat();

}

class Dog:Animal

{

public __________ void Eat()

{

Console.WriteLine("Dog Eating......");

}

static void Main(string[] args)

{

Animal animal = new Dog();

animal.Eat();

}

}

a) abstract,不填

b) abstract,override

c) virtual,不填

d) virtual,override

9) 在开发C#程序过程中,会大量地使用类和对象,其使用方法不包括( BC)。

a) 将类实例化为对象

b) 将对象实例化为类

c) 通过类访问非静态属性或方法

d) 通过对象访问非静态属性或方法

10) 运行下面C#代码将会出现编译错误,出现错误的位置是( D)。

class Teacher

{

public Teacher(string name)

{

this.Name = name;                          //1

}

private string name;

public string Name

{

set { name = value; }                        //2

}

static void Main(string[] args)

{

Teacher teacher = new Teacher("Jason");       //3

Console.WriteLine(teacher.Name);             //4

}

}

a) 1

b) 2

c) 3

d) 4

只有set访问器,证明只能赋值,不能获取值

11) 现有类“c1”,它所在的命名空间为“a.b”,则下列说法中错误的是(D )。

a) 不同命名空间下仍可存在名称为c1的类

b) 不同命名空间下使用c1时,可以通过“using a.b”引入命名空间

c) 同一命名空间下的类,使用c1时不需要引入c1的命名空间

d) 不同命名空间下使用c1时,不可以直接通过“a.b.c1”的方式使用

D选项可以但是麻烦

12) 下面关于泛型集合Dictionary<String, Person> dict = new Dictionary<String,Person>()的操作代码正确的是(C )。

a) dict.Remove(dict[0])   //dict[0]不对,dict只能通过key访问,不可通过下标访问。

b) dict.RemoveAt(0)  //没有RemoveAt方法

c) foreach(Person per in dict.Values){}

d) foreach(Person per in dict.Keys){}

13) 已知Company.xml文件节点代码如下:

<Company>

<Name>一汽大众</Name><价格>10万</价格>

<Name>日本丰田Toyota</Name> <价格>20万</价格>

</Company>

现有如下C#代码片段:

XmlDocument myXml = new XmlDocument();

myXml.Load("Company.xml");

XmlNode company = myXml.DocumentElement;

foreach(XmlNode node in company.ChildNodes )

{

switch (node.Name)

{

case "一汽大众":   不是标签名

Console.WriteLine("车名:{0}", node.InnerText);

break;

case "价格":

Console.WriteLine("价格为:{0}", node.InnerText);

break;

}

}

则正确的输出结果为(D)。

a) 车名:一汽大众

价格为:10万

b) 车名:一汽大众

价格为:20万

c) 车名:一汽大众

车名为:日本丰田

d) 价格为:10万

价格为:20万

14) 已知Animal、Cat、Tiger三个类,其继承关系为Cat: Animal,Tiger: Animal,

已知Animal中成员color的访问修饰符为protected,Cat中成员height的访问修饰符为private,Tiger中成员weight的访问修饰符为public,则下面描述中错误的是( D)。

a) Cat可以访问Animal中的成员color

b) Cat可以访问Tiger中的成员weight

c) Tiger可以访问Animal中的成员color

d) Tiger可以访问Cat中的成员height

15) 在C#中,( C)关键字用于子类的构造函数明确指明调用的父类的构造函数。

a) new  创建对象时使用

b) this   代表当前类的实例

c) base  显示调用父类的构造方法和父类属性和常规方法

d) is

16) C#中的多态不能通过(D )实现。

a) 方法重载

方法重载多态的体现!

b) 抽象类

c) 虚方法

d) 密封类 密封类都无法被继承,何来多态呢?因为我们知道多态的前提是继承。

17) 分析如下C#代码片断,运行后输出的结果是( C)。

ArrayList list = new ArrayList();

list.Add("Sina");

list.Add("Yahoo");

list.Add("Google");

list.RemoveAt(1);

Console.WriteLine(list[1]);

a) Yahoo

b) Sina

c) Google

d) 代码出现运行错误

List集合会自动调整(维护)索引。

18) 在C#语言中,以下关于集合的说法错误的是(A,C)。

a) ArrayList只能通过索引来访问和删除值     也可以直接删除某个对象

b) Hashtable可以直接通过键名来获取值 table[key]

c) 使用List<T>添加、读取元素时不需要拆箱和装箱,这一点和ArrayList相同

d) 使用Dictionary<K,V>可以通过Key获取Value,这一点和Hashtable相同

19) 分析如下C#程序,运行输出的结果是( B)。

   注意是结构体

public struct Size

{

public int x;

public int y;

public Size(int x, int y)

{

this.x = x;

this.y = y;

}

}

class Test

{

static void Main()

{

Size size1 = new Size(8,10);

Size size2 = size1;

size1.y = 200;

Console.WriteLine("{0} | {1}",size1.y,size2.y);

}

}

a) 200 | 200

b) 200 | 10

c) 10 | 10

d) 10 | 200

20) 假设要使用C#设计一个日志系统,要求程序运行时,检查 system.log 文件是否存在,如果已经存在则直接打开,如果不存在则创建一个,为了实现这个目的,应该以FileMode的(C)方式创建文件流。

a) CreateNew

b) Open

c) OpenOrCreate

d) Create

21) 下面关于单例模式说法错误的是(A)。

a) 在单例模式中,允许通过new 构造实例

b) 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例

c) 在C# 中,static 是实现单例模式的重要关键字

d) 单例模式可以确保所有对象都访问唯一的实例

22) 下面不是C#中的访问修饰符的是(AD)。

a) protected

b) internal

c) public

d) internal protected

Public在任何位置都可以访问,甚至是跨程序集都可以访问,

Internal只能在当前程序集中的任何位置访问,出了当前程序集,就无法访问。

在定义内部类的时候可以使用A和D作为类的访问修饰符

23) 在C#中,下面关于结构的说法中,正确的是(C)。

a) 结构和类都是引用类型

b) 定义结构的变量必须用new

c) 不能在定义结构时给结构的成员设置初始值

d) 结构中的整型成员被自动初始化为1    自动初始化为0

课本上原话

24) 关于如下C#的代码,说法正确的是(C);

public class A

{

string S1;

protected string S2;

protected void M1()

{

}

}

public class B : A

{

protected string S3;

}

a) 在A中可以访问S3  解析(父类中不可以访问子类受保护成员)

b) 在B中可以访问S1  解析( 如果类中变量没哟访问修饰符修饰,默认访问修饰符是private)

c) 在B中可以访问S2   解析(可以:因为其访问修饰符是protected类型)

d) 在M1( ) 中可以访问S3   解析(不可以在父类方法中访问子类字段)

25) 关于如下C#代码的说法中,正确的是(D)。

public class Test    //⑴

{

private static int Max = 100;    //⑵ 成员变量:

public Test(int max)

{

Max = max;    //⑶

}

public int GetMax()

{

return Max;    //⑷

}

}

a) 在⑴行中必须将Test类定义为静态类

静态变量可以不出现在静态类中

b) 在⑵中不能将静态成员Max定义为private的

c) 在⑶中不能给静态成员Max赋值

d) 在⑷中可以使用静态成员Max

26) 在C#中,下面是方法的重载的是(C)。

a) public string Test(int x, int y){ …}和public string Test(int a, int b){ …}同一个方法

b) public string Test1(int x, int y){ …}和public string Test2(int x, int y){ …}

c) public string Test(int x, int y){ …}和public string Test(int a){ …}

d) public string Test(int x, int y){ …}和public int Test(int x, int y){ …}同一个方法

和返回值类型没有半毛钱关系

27) 下面C#代码执行的结果是(A)。

public class A{ }

public class B : A

{

static void Main()

{

A a = new A();

B b = a as B;

if (b == null)

Console.WriteLine("null");

else

Console.WriteLine(b is A);

}

}

a) null

b) True

c) False

d) 出现异常

28) 如下C#代码的执行结果是(C)。

public class Test

{

public int i = 1;

public Test(int i)

{

this.i += i;

}

static void Main()

{

Test t = new Test(2);

Console.WriteLine(t.i);

}

}

a) 1

b) 2

c) 3

d) 4

29)有如下C# 代码,则下面选项中说法正确的是(BC)。

public class A { }   Person

public class B : A { }  Student

A a = new A();

B b = new B();

a) 表达式a is B的值为true

b) 表达式b is A的值为true

c) 表达式a as B的值为null

d) 表达式b as A的值为null

30) 在C#中,下面类型中是引用类型的是(CD)。

a) DialogResult枚举

b) System.Int64

c) string

d) StringBuilder

二 简答题:

1.请简述泛型集合List<T>中“T”的含义和作用。并说明List<T>与ArrayList的异同。

n List<T>中的T可以对集合中的元素类型进行约束;

n T表明集合中管理的元素类型;

n ArrayList与List<T>都使用索引访问元素;

n ArrayList与List<T>可以通过索引删除、也可以直接删除对象;

n ArrayList与List<T>遍历时直接遍历元素对象;

n ArrayList获取元素时需要类型转换,List<T>不需要类型转换;

n 同一个ArrayList可以保存不同类型的元素,List<T>只能保存T允许的类型。

2.面向对象的三大特性是什么?并简述每个原则的基本功能。

n 封装:保证对象自身数据的完整性、安全性;

n 继承:建立类之间的关系,实现代码复用,方便系统的扩展;

n 多态:相同的方法调用可实现不同的实现方式。

S2第一本书内测的更多相关文章

  1. 【java学习系列】 Android第一本书《第一行代码》

    开始Java的学习,从Android,开始吧.<第一代码>开始阅读和调试demo例子. 下面是 <第一行代码>的思维导图:

  2. S2 第二本书 深入.NET平台和C#编程 总结 by天命

    第一章 深入.NET框架 .NET框架 包含 CLR公共语言运行时 FCL框架类库 CLR(Common Language Runtime)公共语言运行时 CLS(Common Language Sp ...

  3. GitBook入门(用github做出第一本书)——超详细配图说明

    我最近接触到gitbook,发现它支持markdown和git,刚好把我之前在github上的笔记可以生成一本书,于是我就开始着手捣鼓gitbook,一下午的时间就弄的差不多了,说明这个东西还是挺容易 ...

  4. 精通Web Analytics 2.0 (3) 第一章:网站分析的新奇世界

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第一章:Web Analytics 2.0的新奇世界 多年以来,我们很清楚的知道,网站分析能够真正的改革网络上业务的完成方式.那 ...

  5. 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(5)

    数据操作与REST API(Data manipulation with REST API) ElasticSearch REST API可用于各种任务.多亏了它,我们可以管理索引,更改实例参数,检查 ...

  6. 《代码的第一行——Android》封面诞生

    <代码的第一行--Android>已经上市近一个月,现在的情况是相当不错的销售,也特别感谢众多朋友的支持. 其实一本好书,假设你想卖.除了给予外力所要求的内容.封面设计是至关重要的,这本书 ...

  7. Effective java第一章引言

    菜鸟一枚,开始读第一本书<Effective Java>(第二版)~ 看引言就有好多名词不懂(>_<) 导出的API由所有可在定义该API的包之外访问的API元素组成.一个包的 ...

  8. 学习ucosii要用到的几本书

    转自:http://bbs.elecfans.com/jishu_551275_1_1.html   1.嵌入式实时操作系统μC/OS-II(第2版)  邵贝贝 等译 北京航空航天大学出版社     ...

  9. 适合产品经理的十本书 From 俞军

    (转自俞军,如有侵权,请评论区留言,我会尽快删除:) 适合产品经理的十本书 俞军 入门三本书:社会心理学 阿伦森 插图第七版:特别好,适合成为“产品经理的第一本书”第一本经济学:经济学帮助人们洞察世事 ...

随机推荐

  1. List转换成JSON对象报错(三)

    List转换成JSON对象 1.具体错误如下 Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/e ...

  2. AM335x(TQ335x)学习笔记——触摸屏驱动编写

    前面几篇文章已经通过配置DTS的方式完成了多个驱动的移植,接下来我们解决TQ335x的触摸驱动问题.由于种种原因,TQ335x的触摸屏驱动是以模块方式提供的,且Linux官方内核中也没有带该触摸屏的驱 ...

  3. Keras官方中文文档:序贯模型

    快速开始序贯(Sequential)模型 序贯模型是多个网络层的线性堆叠,也就是"一条路走到黑". 可以通过向Sequential模型传递一个layer的list来构造该模型: f ...

  4. onmouse事件

    常用的鼠标事件:onmouseenter,onmouseleave,onmouseover,onmouseout,onmouseup,onmousedown,onmousewheel,onmousem ...

  5. 9.python异常处理

    常见异常 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x FileNotFoundError 输入/输出异常:基本上是无法打开文件 ImportErro ...

  6. C#封装程序集属性方法注释说明

    一.使用封装程序集好处: 在很多分布式应用程序开发中,针对每一种功能可能条用的接口不一样,往往习惯将需要被调用的接口,封装成DLL给调用方应用后使用,这样既规范了调用的方式,又避免了调用出现参数请求方 ...

  7. mysql主从复制的基本原理

    怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作:  1.1.版本一致  1.2.初始化表,并在后台启动mysql  1.3.修改root的密码 2.修 ...

  8. 在CentOS7中安装.Net Core2.0 SDK

    1.sudo yum install libunwind libicu(安装libicu依赖) 2.curl -sSL -o dotnet.tar.gz https://go.microsoft.co ...

  9. vue的图片上传

    转载  代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. Hashtable源码解析(JDK1.8)

    package java.util; import java.io.*; import java.util.concurrent.ThreadLocalRandom; import java.util ...