威尼斯www.9778.com-威尼斯正版官方网站

深远.NET平台C#编程 测验题剖析

日期:2020-01-15编辑作者:编程人生

using static 除了命名空间,还可以在命名空间最后加一个类,这样后面可以直接使用这个类的:静态方法、类中类等。

yield 关键字会告诉编译器当前的函数是在一个循环内部,编译器会相应生成一个执行它在循环体内部所表示行为的类,yield 和 return 关键字一起用于为枚举器对象提供返回值,比如说:在 foreach 内部的每一次循环内,yield 关键字用于终止当前循环:

选择题讲解

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

 

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

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

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

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

 

 

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

 

 

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

 

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

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

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

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

 

A:对象没有静态和动态之分

 

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

 

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

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

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

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

 

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

 

 

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

 

a) +

b) -

c) *

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();

    }

}

a) 12

b) 21

c) 13

d) 23

 

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

 

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

 

class Test

{

    public void F()

    {

        Console.Write("A");

    }

}

class B : Test

{

    new public void F()

    {

        Console.Write("B");

    }

    static void Main()

    {

        Test objA = new B();

        objA.F();

    }

}

a) A

b) B

c) BA

d) AB

 

A: 有实现多态

 

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

 

B:因为是抽象类所以下面也是抽象方法,是调用子类的房方法

 

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

 

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

 

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

 

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

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

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

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

 

 

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

 

a) dict.Remove(dict[0])

b) dict.RemoveAt(0)

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

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

 

A:dict[0]不对,dict只能通过key访问,不可通过下标访问。

B:没有RemoveAt方法

D:获取的是Values的值

 

 

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

 

<Company>

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

<Name>日本丰田</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万

 

D:case后写的不是标签名所以只有价格

 

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

 

A:创建对象时使用

B:代表当前类的实例

C:显示调用父类的构造方法和父类属性和常规方法

D:类型转换

 

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) 代码出现运行错误

 

C:下标1的被删除所以Google被显示

 

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

 

a) ArrayList只能通过索引来访问和删除值

b) Hashtable可以直接通过键名来获取值

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

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

 

A:可以直接删除某个对象

 

 

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

 

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

 

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

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

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

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

 

A:结构类型是引用类型

B:定义结构的变量不用NEW

D:会被自动初始化为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

c) 在B中可以访问S2

d) 在M1( ) 中可以访问S3

 

A:父类中不可以访问子类受保护成员

B:如果类中变量没哟访问修饰符修饰,默认访问修饰符是private

 

C:因为其访问修饰符是protected类型

D:不可以在父类方法中访问子类字段

 

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

 

public class Test    //⑴

{

    private static int Max = 100;    //⑵

    public Test(int max)

    {

        Max = max;    //⑶

    }

 

    public int GetMax(D)

    {

        return Max;    //⑷

    }

}

 

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

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

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

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

 

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

 

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){ …}

AD:都是一个方法 

B:方法名不同

 

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

 

C:2+1=3

 

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

 

public class A { }

public class B : A { }

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

 

 is是类型判断  as是类型转换

 

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

 

a) DialogResult枚举

b) System.Int64

c) string

d) StringBuilder

比如,以类中类来举例,原来是:

在正式开始之前,我需要先声明:这些关键字对于偏向底层的程序员更加耳熟能详,对这些关键字不了解并不影响你作为一个合格的程序员。

现在可以:

在 :: 运算符前面使用的 global 上下文关键字引用全局命名空间,该命名空间是任何 C# 程序的默认命名空间,未以其他方式命名。

using Itpow; Class1.Class2 c = new Class1.Class2();

classIsTest
{
    static voidTest(objecto)
    {
        Class 1a;
        Class 2b;
        if(o isClass1)
        {
            Console.WriteLine("o is Class1");
            a = (Class1)o;
            // Do something with "a."
        }
        else if (o is Class2)
        {
            Console.WriteLine("o is Class2");
            b = (Class2)o;
            // Do something with "b."
        }
        else
        {
            Console.WriteLine("o is neither Class1 nor Class2.");
        }
    }

 

若要引用两个具有相同完全限定类型名的程序集,必须在命令行上指定别名,如下所示:

C# 引用命名空间,一般用 using,那么 using static 是什么东西呢?

yield

using static Itpow.Class1; Class2 c = new Class2();

as

这将创建外部别名 GridV1 和 GridV2。若要从程序中使用这些别名,请使用 extern 关键字引用它们。例如:

在上面的示例中,GridV1::Grid 是来自 grid.dll 的网格控件,而 GridV2::Grid 是来自 grid20.dll 的网格控件。

MSDN 链接:

MSDN 链接:

MSDN 链接:

MSDN 链接:

每一个外部别名声明都引入一个额外的根级别命名空间,它与全局命名空间平行,而不是在全局命名空间内。因此,来自每个程序集的类型就可以通过各自的、根源于适当的名空间别名的完全限定名来引用,而不会产生多义性。

as 操作符很像一个类型转换器,然和,当转换无法发生时(译者按:比如类型不匹配),as 会返回 null 而不是抛出一个异常 :

MSDN 链接:

MSDN 链接:

MSDN 链接:

T 是引用类型还是值类型。

给定参数化类型 T 的一个变量 t,只有当 T 为引用类型时,语句 t = null 才有效;只有当 T 为数值类型而不是结构时,语句 t = 0 才能正常使用。解决方案是使用 default 关键字,此关键字对于引用类型会返回 null,对于数值类型会返回零。对于结构,此关键字将返回初始化为零或 null 的每个结构成员,具体取决于这些结构是值类型还是引用类型 :

自从 C# 3.0 开始,在函数作用局范围内声明的变量可以通过 var 关键字声明成隐含类型 , 隐含类型是强类型,你需要自己声明隐含类型本地变量,然后编译器会帮你决定为某种强类型。

这意味着这些关键字会让你在编写程序时得到更好的代码质量和可读性

在 2.0 版本上跑的程序也可以使用 var 关键字,但是需要你的编译器是 3.0 以上版本并且设置代码输出版本为 2.0:

有时可能有必要引用具有相同完全限定类型名的程序集的两个版本,例如当需要在同一应用程序中使用程序集的两个或更多的版本时。通过使用外部程序集别名,来自每个程序集的命名空间可以在由别名命名的根级别命名空间内包装,从而可在同一文件中使用。

/*
Output:
2 4 8 16 32 64 128 256
*/

volatile 关键字表示字段可能被多个并发执行线程修改。声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值。

global

class Class1{ }
classClass2{ }
classClass3: Class2{ }

如果 T 为值类型,则它是数值还是结构。

default

var i = 10; // implicitly typed
int i = 10; //explicitly typed

public classList
{
    //using System.Collections;
    
    public static IEnumerable Power(int number, int exponent)
    {
        int counter = 0;
        int result = 1;
        while(counter++ < exponent)
        {
            result = result * number;
            yield return result;
        }
    }
    
    static void Main()
    {
        // Display powers of 2 up to the exponent 8:
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
    }
}

using()

extern alias GridV1;
extern alias GridV2;

/r:GridV1=grid.dll
/r:GridV2=grid20.dll

readonly

MSDN 链接:

定义一个范围,在范围外的对象将会被回收:

    static void Main()
    {
        Class1 c1 = new Class1();
        Class2 c2 = new Class2();
        Class3 c3 = new Class3();
        Test(c1);
        Test(c2);
        Test(c3);
        Test("a string");
    }
}

var

MSDN 链接:

class TestClass : global::TestApp { }

/*
Output:
o is Class1
o is Class2
o is Class2
o is neither Class1 nor Class2.
*/

volatile

readonly 关键字是一个可作用在变量域上的修饰符,当一个变量域被 readonly 修饰后,这个变量只可在声明或者当前变量所属类的构造器内赋值。

T temp = default(T);

extern alias

在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:

using (C c = new C())
{
    c.UseLimitedResource();
}

本文由威尼斯www.9778.com发布于编程人生,转载请注明出处:深远.NET平台C#编程 测验题剖析

关键词:

Google C++ 编程风格指南:作用域

通常每一个  .cc  文件都有一个对应的  .h  文件. 也有一些常见例外,如单元测试代码和只包含  main()  函数的  .c...

详细>>

C++ 中三种正则表明式相比较

3、boost regex /* write by xingming * for:test boost regex * time:2012年10月23日11:35:33 * */#include iostream#include string#include sys/time.h#in...

详细>>

威尼斯正版官方网站C++中的基类与派生类

一、 C++成员函数的重载 C++中的成员函数有四种,分别是普通成员函数,virtual虚函数,const成员函数。 (1) void func(in...

详细>>

威尼斯正版官方网站new与malloc的10点区别

堆内存 vs. 内存池 Allocator类在“释放列表”为空时,能够从堆内存或者内存池中申请新内存。如果使用内存池,你必...

详细>>