A) 重载方法的参数个数必须不同 C) 重载方法必须具有不同的返回值类型 B) 重载方法必须具有不同的形参列表 D) 重载方法的参数类型必须不同
21.关于静态成员,下列说法正确的是【 】。
A) 同一个类中的静态成员,类实例化后,在不同的对象中形成不同的静态成员 B) 在类实例化后,同类型的对象都共享类的静态成员,静态成员只有一个版本 C) 在类定义时静态成员属于类,在类实例化后静态成员属于对象 D) 在类实例化后静态成员已被实例化,因此不同的对象有不同的静态成员 22.下列关于静态方法的说法,错误的是【 】。
A) 静态方法不对特定实例进行操作,不与实例相关联 B) 使用静态方法的语法格式:类名.静态方法(实参列表) C) 静态方法只能访问类中的静态成员,不能访问非静态成员 D) 静态方法不能访问类中的静态成员 23.已知: int a=100;
void Func(ref int b) { …… } 则下列函数调用正确的是【 】。
A) Func(ref(10*a)) B) Func(ref 10*a) C) Func(ref(a) ) 24.下面对方法中的ref和out参数说明错误的是【 】。
D) Func(ref a)
A) ref和out参数传递方法相同,都是把实参的内存地址传递给形参,实参与形参指向同一个内存存储区域,但ref要求实参必须在调用之前明确赋过值 B) ref是将实参传入形参,out只能用于从方法中传出值,而不能从方法调用处接受实参数据。 C) ref和out参数因为传递的是实参的地址,所以要求实参和形参的数据类型必须一致 D) ref和out参数要求实参和形参的数据类型或者一致,或者实参能被隐式地转化为形参的类型 25.设方法Max的签名为:public void Max(out int max, params int[] a),maxval是一个int型的值类型变量,arrayA是一个int型的数组对象,则下列调用该方法的语句中有错的是【 】。 A) Max(maxval,4,5,3) C) Max(out maxval, arrayA) 26. 有以下类声明:
class Class1
{ public static int Count = 0;
public Class1() { Count++; } }
在执行以下语句后,Class1.Count的值是【 】。
Class1 o1 = new Class1(); Class1 o2 = new Class1();
A) 1 B) 2 27.在类MyClass中有下列方法定义:
C) 3
D) 0
}
B) Max(out maxval, 4, 5, 3) D) Max(out maxval, 4, 5)
public void test(params int[] arr) { Console.Write(\使用params参数!\
public void test(int x, int y) { Console.Write(\使用两个整形参数!\ } 请问上述方法重载有无二义性?若没有,则下列语句的输出为【 】。 Myclass x=new MyClass(); x.test(0); x.test(0,1); x.test(0,1,2); A) 有语义二义性
B) 使用params参数!使用params参数!使用params参数! C) 使用params参数!使用两个整形参数!使用params参数! D) 使用params参数!使用两个整形参数!使用两个整形参数!
- 20 -
28.分析以下C#语句,注意类MyClass没有访问修饰符。若必须为类MyClass添加访问修饰符,并
使MyClass的可访问域保持不变,则应选择【 】。
namespace test
{ class MyClass
{ }
A) private B) public C) protected 29.C#中MyClass为一个自定义类,其中有以下方法定义:
D) internal
int i;
}
public void Hello() { …… }
并使用以下语句创建了该类的对象obj,则可以访问类MyClass的Hello方法的语句是【 】。
MyClass obj=new MyClass()
A) obj.Hello() B) obj:Hello() C) MyClass.Hello 30.下列的关键字中可用于引用类的当前实例的是【 】。
D) MyClass:Hello
A) base B) this C) new D) override 31.在C#中,以下有关索引器的参数个数的说法中正确的是【 】。
A) 索引器只能有一个参数 C) 索引器可以没有参数
B) 索引器可以有多个参数 D) 索引器至少要有两个参数 C) operator
D) event
32.委托声明的关键字是【 】。 A) delegate B) sealed 33.以下语句的作用是【 】。
public delegate void Hello(string s); A) 声明了一个名称为Hello的全局方法 B) 声明了一个名称为Hello的函数原型 C) 声明了一个名称为Hello的函数指针 D) 声明了一个名称为Hello的委托类型
34.有声明语句:delegate void TimeDelegate(string s),则以下可以和委托TimeDelegate绑定的方法
是【 】。
A) void f(){ } B) string f(){ } C) void f(string a){ } D) string f(string a){ }
35.声明一个委托类型:public delegate int myCallBack(int x); 则以下可以和委托myCallBack绑定的
方法是【 】
A) void myCallBack(int x); B) int receive(int num); C) string receive(int x); D) 不确定的 36.有以下部分C#代码,其中MyDelegate是一个【 】。
static void fun(string s) { Console.WriteLine(s); } public static void Main()
{ MyDelegate p=new MyDelegate(fun); }
p(\
C) 函数
D) 类名
A) 结构类型; B) 委托类型 37.对于下面声明的委托和定义的类:
delegate int Mydelegate(int n); class A
{ public int f(int i) { return 0; }
public void g(int j) { }
public static int h(int k) { return 0; }
}
下面语句中哪些是正确的【 】。
- 21 -
Mydelegate d1=new Mydelegate(A.h); A a=new A();
Mydelegate d2=new Mydelegate(a.f); Mydelegate d3=new Mydelegate(a.g);
//语句1 //语句2 //语句3
Mydelegate d4=new Mydelegate(a.h); A) 语句1、语句2、语句3、语句4 C) 语句3、语句4 38.以下用于定义事件的关键字是【 】。
//语句4 B) 语句1、语句2 D) 语句2、语句3
A) delegate B) event C) this D) value 39.将发生的事件通知其他对象(订阅者)的对象称为事件的【 】。 A) 广播者 B) 发行者 C) 通知者 40.已知类MyClass中事件MouseClicked定义如下:
public delegate void mydelegate();
public event mydelegate MouseClicked(); 执行下列语句:
Method obj=new Method(); MyClass e=new MyClass();
D) 订阅者
e. MouseClicked +=obj.fun; e. MouseClicked +=obj.fun;
其中Method类中包含事件处理方法fun,然后引发该MouseClicked 事件,其结果为【 】。 A) obj.fun方法被调用一次 C) obj.fun方法不会被调用 二.填空题
1.【 类 】是面向对象编程的基础模块,在C#中,所有的内容都被封装在其中。 2.声明类之后,通过new创建【 类对象 】,它是一个引用类型的变量。
3.静态字段是用【 static 】修饰符声明的字段,无论存在多少个类实例,它们都共享一个字段副本。 4.定义方法时使用的参数是【形参】,调用方法时使用的参数是【 实参 】。
5.数据类型说明符用来说明方法返回值的类型,如果没有返回值,则类型说明符应为【 void 】。 6.下列方法的作用是求两个数的较大数,并把较大数作为返回值,请填空。 float max_v(【 (1)】)
{ }
(2) return(max)
float max; max=a;
if(max
B) obj.fun方法被调用二次 D) obj.fun方法被调用四次
(1) int a, int b
7.在调用方法时,要使参数按引用方式进行传递,需要使用关键字【 ref 】。
8. 在调用方法时,要使参数按输出方式进行传递,需要使用关键字【 out 】,此时并不要求实参变量已经初始化。 9.在类的成员声明时,若使用了【protected】修饰符,则该成员只能在该类或其派生类中进行访问。 10.类的静态成员属于【 类 】所有,非静态成员属于类的实例所有。
11.已知某类的类名为ClassA,则该类的析构函数名为【~ClassA 】。
12.C#方法的参数有四种,分别是:值参数(对应值传递)、引用参数(对应地址传递)、输出参
数和参数数组,在形参中声明参数数组时应使用【params】关键字。
- 22 -
13.要给属性对应的数据成员赋值,通常要使用set访问器,set访问器始终使用【 value】来设置
属性的值。 14.声明一个公有委托类型MyFun1,该委托类型可以与无参且返回值为int类型的方法相关联,则
该声明语句应为【 public delegate int MyFun1(); 】。 15.下列程序的输出结果是【 30 】。 class Program { static void sub(int x, int y, int z)
{ { }
}
16.下列程序的运行结果是【3,5 】。
class program
{ static void Func(int a, out int x,out int y) }
{ x=a/10; y=a; static void Main() { }
int m=35;
int a, b;
}
z=x*x+y*y; int a=30;
sub(5, 2, a);
Console.WriteLine(\
}
public static void Main(string[] args)
Func(m, out a,out b);
Console.WriteLine(\
17.下列程序的运行结果是【 18 】。
class A
{ private int x;
public static A operator -(A b, A c)
{ A a=new A();
a.x=b.x * c.x; return a;
}
public void setx(int x) { this.x=x; }
public int getx(){ return x; } }
class Program { static void Main() { A a=new A(); A b=new A(); A c = a - b;
a.setx(3); b.setx(6);
Console .WriteLine (\ }
}
18. 下列程序的运行结果是【中国地质大学 】。
public class University { const int MAX = 10;
- 23 -
private string[] name = new string[MAX]; public string this[ int index ]
{ get
{ if (index >= 0 && index < MAX) return name[index]; else return name[0]; } set
{ if (index >= 0 && index < MAX) name[index] = value; }
} }
class Program { static void Main()
{ University un=new University(); un[0] = \清华大学\ un[1] = \北京大学\ un[2] = \中国地质大学\ Console.WriteLine(un[2]); } }
三.改错题
(说明:下列程序中部分下划线的代码有错误,请将有错误的部分改正过来,并说明原因) 1.
class A {
A(){ } }
A a=new A();
答:“A(){ }”应改为“public A(){ }”。因为在默认修饰符的情况下,类中的成员被默认为私有成员,
因此在用A创建a时试图调用此构造函数,会因此构造函数为私有成员而拒绝访问。 2. class A
{
public static int x=100; public int y=200; }
class Program
{ static void Main(string[] args)
{ }
A a=new A(); a.x=10; a.y=20;
}
答:“a.x=10;”应改为“A.x=10;”。因为x是类A中的静态成员。 3. class A
{ }
A(){ } void A(){ }
private A(int x){ } private A(int y){ }
- 24 -