zoukankan      html  css  js  c++  java
  • 深入.NET平台C#编程 测试题分析

    选择题讲解

    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) abstractoverride

    c) virtual,不填

    d) virtualoverride

    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) 已知AnimalCatTiger三个类,其继承关系为Cat: AnimalTiger: Animal

    已知Animal中成员color的访问修饰符为protectedCat中成员height的访问修饰符为privateTiger中成员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

  • 相关阅读:
    Best Time to Buy and Sell Stock III
    Valid Palindrome
    Longest Substring Without Repeating Characters
    Copy List with Random Pointer
    Add Two Numbers
    Recover Binary Search Tree
    Anagrams
    ZigZag Conversion
    Merge k Sorted Lists
    Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/shuaibin/p/5300584.html
Copyright © 2011-2022 走看看