您的位置:首页 > 其它

.NET测试四面向对象基础及参考答案

2010-07-19 15:33 441 查看
一.填空题
1.当类T只声明了私有实例构造函数时,则在T的程序文本外部,_不可以_____(可以 or 不可以)从T派生出新的类,_不可以___(可以 or 不可以)直接创建T的任何实例。(程序调试回答)
class T
{
string Name;
private T()
{
Name="Hoan";
}
static void Main(string[] args)
{

}
}
class A:T
{
}2.在下面的例子里(此题不能调试
using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){ }
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}


当使用new B()创建B的实例时,产生什么输出?

x=__1__,y=__0__

二.选择题
3以下描述错误的是()
a)
C++中支持抽象类而在C#中不支持抽象类
b) C++
中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。
c)
C#中可使用 new 修饰符显式隐藏从基类继承的成员。
d)
C#中要在派生类中重新定义基类的虚函数必须在前面加Override

4. 下列描述错误的是()
a)
类不可以多重继承而接口可以;
b)
抽象类自身可以定义成员而接口不可以;
c)
抽象类和接口都不能被实例化;
d)
一个类可以有多个基类和多个基接口;
5. 下列关于构造函数的描述正确的是()
a)
构造函数可以声明返回类型。
b)
构造函数不可以用private修饰
c)
构造函数必须与类名相同
d)
构造函数不能带参数
6. 下列关于C#中索引器理解正确的是( )
a)
索引器的参数必须是两个或两个以上
b)
索引器的参数类型必须是整数型
c)
索引器没有名字
d)
以上皆非

三.判断题
判断题(括号内填写T---TrueF---False)
1.C#中,装箱操作是将值类型转化成引用类型。 ( T)
2.C#中,索引器是专门用来访问对象中的数组信息的。(T)
3.C#中,int[][]是定义一个int型的二维数组。(F ) int[,]
4.任何事物都是对象。(F)
四.问答题
7.静态变量和非静态变量的区别?
静态变量用 static 修饰符进行声明,在类中被装载时创建通过类进行访问,所属类的所有实例的同一静态变量都是同一个值
非静态变量:
不带有 static 修饰符声明的变量,在类被实例化时创建通过对象进行访问,同一个类的不同实例的同一非静态变量可以是不同的值。
static void Main(string[] args)
{
Console.WriteLine("静态变量是: {0}",Stu.S);
Stu S1 = new Stu();
S1.NotS = "CCC1";
Stu S2 = new Stu();
S2.NotS = "CCC2";
Console.WriteLine("S1 非静态变量是: {0}", S1.NotS);
Console.WriteLine("S2 非静态变量是: {0}", S2.NotS);
}
class Stu
{
public static String S = "C# 2.0";
public String NotS = "ASP.NET";
}
8.const static readonly 区别?
1.const 字段只能在字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化,readonly 字段可能具有不同的值。
const 字段是编译时常数,而 readonly 字段可用于运行时常数。
static void Main(string[] args)
{
const int x=30;
A p = new A();
// p.b = 40;//
Console.WriteLine("p2: x={0}, y={1}, z={2}", x, p.y, p.z);
}
class A
{
public readonly int y;
public readonly int z=50;
public A()
{
y = 40;
}

}

9. StringBuilder String 的区别?
System.String是不可变的字符串。String类是final类故不可以继承。
System.StringBuilder存放了一个可变的字符串,大量使用string类时,并提供一些对这个字符串修改的方法

10.internal 修饰符起什么作用?
.internal 修饰符表示内部成员,在同一命名空间内可以访问。
internal class
{

}
11. params 有什么用?
Params数组参数,它在方法成员的参数列表中使用,为方法提供参数个数,在方法声明中只允许一个 params 关键字。
class T
{
public static void xParms(params int[] list)
{

for (int i = 0; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
}
static void Main(string[] args)
{
xParms(1,2,3);
Console.ReadLine();
}
}

12.利用operator声明且仅声明了“==”,有什么错误么?
有错,重载运算符时声明了“==”还必须声明 “!=
13.类和结构的区别?
类可以被实例化成对象,它是引用类型,分配在内存的堆上的,类不支持多重继承,要能用接口继承来实现,它有默认的构造函数,有析构函数;而结构是值类型,存储的是具体的数据,分配在内存的栈上的,结构可以实现接口,但它们无法继承另一个结构,它要创建构造函数,没有析构函数。
static void Main(string[] args)
{
stu1 s = new stu1();
s.stuNo = 2009;
s.stuName = "Kebi";
stu2 p=new stu2();
p.stuNo = 2010;
p.stuName = "Nash";
Console.WriteLine("学号:{0}姓名:{1}",s.stuNo,s.stuName);
Console.WriteLine("学号:{0}姓名:{1}", p.stuNo, p.stuName);
}
class stu1 //定义类
{
public int stuNo;
public string stuName;
}
public struct stu2 //定义结构
{
public int stuNo;
public string stuName;
}


14.sealed修饰的类有什么特点?
sealed修饰的类是封装类,防止类的继承。
sealed class A
{
public string Name;

}
class B:A //不能继承
{
}
18.重载的特点是什么?
重载overload的特点:允许存在在多个同名函数/方法,参数或参数类型可以不同。
static void Main(string[] args)
{
int a=1;
int b=2;
double c=3;
double d=4;
int m=add(a,b);
Console.WriteLine(m);
double n=add(c,d);
Console.WriteLine(n);
}
static int add(int x,int y)
{
return x+y;
}
static double add(double x,double y)
{
return x+y;
}

19..描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
C#中类的索引器(indexer)是一类特殊的属性,通过它可以像引用数组一样引用自己的类。
20. 成员变量和成员函数前加static的作用?
它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。
分别用来反映类的状态。
比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: