c#面试3(选择题)
1、下列有关基本类的大小不正确的是
A、int类型是4个字节
B、bool类型是1个字节
C、long类型是8个字节
D、char类型是一个字节
3、有关数组说法不正确的是
A、数组的内存是分配在栈中 堆
B、数组的索引从零开始的
C、数组是一种数据结构,它包含若干相同的类型的变量
D、数组可以是一维、多维、交错的
4、有关结构体说法不正确的是
A、在结构体声明中,除非字段被声明为const或static,否则无法初始化
B、结构体不能声明默认的构造函数(没有参数的构造函数)或析构函数
由于结构的副本由编译器自动创建和销毁,因此不需要使用默认构造函数和析构函数。实际上,编译器通过为所有字段赋予默认值来实现默认构造函数。
结构是值类型。那么如果从结构创建一个对象并将该对象赋给某个变量,则该变量包含结构的全部值。复制包含结构的变量时,将复制所有数据,对新副本所做的任何修改都不会改变旧副本的数据。由于结构不使用引用,因此结构没有标识;无法区分具有相同数据的两个值类型实例。
C、结构体不能从类或其他结构体继承
所有结构体都继承ValueType父类,但它们本身不能被其它类继承。
C#中的父类与子类的继承关系与C和C++中的类似,这里先阐述最重要的一点:假如子类继承了父类,那么子类可以强制转换为父类,并且保证编译和运行都不出错;但是父类强制转换成子类的时候,编译可以通过运行通不过。
实际上:将子类强制转换为父类之后,在用这个父类强制转换为另外一个子类的时候编译和运行也都能通过;只是如果将父类直接转换为子类的时候运行会出错。这就好比:假设父类是一个装了5个“苹果”的“小型篮子”,而子类则是一个装了5个“苹果”和5个”西瓜“的大型篮子;将子类强制转换为父类<=>把父类的”小型篮子“换成”大型篮子“,但还是只装5个”苹果“(将父类的引用指向子类,但父类只能调用父子自身的变量和方法),之后再用这个父类强制转换为另外一个子类<=>向”大型篮子“里面装入5个”西瓜“送给子类的引用;而将父类直接转换为子类<=>用父类的”小型篮子“装”5个苹果和5个西瓜“送给子类的引用(当然是装不下)
另外一个值得非常注意的地方是:无论是子类强制转换赋给父类,还是父类(由子类强转得到)强制转换为子类;类对象是根据声明的类型(子类或父类)去调用其变量和函数的,与赋值无关。
可以看出:类的实例对象在调用其变量和方法时,确实是以 声明 成为的类为依据的。
D、结构体是引用类型的 (值 结构体是值类型的 类是引用类型的)
5、有关结构体和类的说法不正确的是
A、结构是值类型的,而类是引用类型的
B、结构体不可以声明构造函数(可以申明非默认的构造函数)
C、结构体直接继承System.ValueType类型
D、结构体可以继承接口
public struct MyS : IStruct
{
public void SayHello()
{
Console.WriteLine("Hello");
}
}
public interface IStruct
{
void SayHello();
}
可以说结构体和类一样,只不过结构体中定义的变量或者方法的默认访问属性是public的,而类是private的
6、有关类和结构体的区别说法不正确的是
A、结构体是值类型的,而类是引用类型的
B、类的实例化需要new,而结构体可以不用
C、结构体内存一定分配在栈中,而类的内存分配在堆中
(
使用malloc函数新建一个结构体是在堆上分配的,。
)
D、结构可用作可为null的类型,因而可向其赋值null
7、关于静态类说法不正确的是
A、声明静态类,该类不能使用new关键字创建实例
B、静态类仅包含静态成员(对)
C、静态类不能包含常量成员
D、静态类是密封的(对)
- 静态类可以有静态构造函数,静态构造函数不可继承。
静态类的主要特性:
1:仅包含静态成员。
2:无法实例化。
3:是密封的,不能被继承。
4:不能 包含实例构造函数。
静态类主要是共享,静态类内部成员必须是静态的。
静态一般在程序加载的时候被构造。
我个人用静态类最多的地方的是程序配置部分,因为他的共享特性,在多个窗体中都需要调用,更主要的就是他在程序启动的时候就被初始化了。
静态类可以有构造函数,但是只被调用一次。
就上面说的程序配置数据部分,如果使用非静态类,那么你需要在任何有可能访问到他的代码前手动初始化他,并且还要将他赋给一个静态变量后才能使用。
费事不费事另说,假若你需要在他构造前某个位置来调用它,那还需要修改你构造他的代码的位置。
非静态类使用完成后系统会自动销毁释放,所以非静态类相对来说比较安全,而静态类是在程序结束后销毁的,在销毁前一直驻留在内存中,因此出现错误的可能性会大些。
建议不要过多的使用静态类,适时使用。
静态类
非静态成员(字段、属性、和方法)或者非常量是属于类的实例的。
静态类是密封的。也不能被继承
静态构造函数的调用不是由用户自己调用的,而是系统系统调用的。
静态类不能调用析构函数。
8、有关静态成员说法不正确的是
A、可以使用类的实例,访问本身类的静态的成员
B、静态方法可以被重载,但不能被重写
C、静态成员在第一次被访问之前并且在任何静态构造函数之前初始化
D、可以在类中声明静态成员
无法使用类的实例去访问静态成员,静态成员不是不属于类的对象的
静态方法不能标记为override virtual abstract
9、有关委托的说法不正确的是
A、一旦为委托分配了方法,委托与该方法具有完全相同的行为
B、委托是一种引用方法的类型
C、委托可以链接在一起,方法不必与委托签名完全匹配
D、委托就是事件一种表示形式
委托是引用类型
10、delegate void Del(int x);
void DoWork(int k);
下列关于委托订阅不正确的是
A、Del d=DoWork;
B、Del d=new Del(DoWork);
C、Del d+=DoWork
D、Del d=delegate(int x){DoWork(x);};
11、有关静态构造函数说法不正确的是
A、静态构造函数既没有访问修饰符,也没有参数
B、在创建第一个实例前或引用任何静态成员之前,将自动调用静态构造函数来初始化。
C、在程序中,用户可以控制何时执行静态构造函数
D、无法直接调用静态构造函数
静态构造函数必须没有参数
12、有关absract关键字说法不正确的是
A、absract用于创建仅用于继承用途的类和类的成员
B、absract用于方法,则该方法隐含是虚函数
C、absract用于类,则此类无法被实例化
D、absract用于方法,则该方法有方法体
虚方法virtual的意思是子类可以重写,抽象方法abstract是子类必须重写。
抽象方法必须能被继承
13、有关继承需要用的关键字说法不正确的是
A、virtual用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
B、virtual可以和static、abstract、private、override修饰符一起使用。
C、override关键字提供从基类继承的成员的新的实现,重写的基类方法必须是virtual、abstract、或override关键字修饰的。
D、Sealed用于修饰类时,将会阻止其他类从该类派生
14、有关索引器说法不正确的是
A、索引器允许类或结构体的实例就像数组一样进行索引
B、索引器类似于属性,不同之处在于他们的访问器采用参数
C、索引器不可被重载
D、索引器不必根据整数值进行索引,由你决定如何定义特定的查找机制
Public int this[int index]
{
set{}
get{}
}
索引器(Indexer)
是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便、直观的被引用。索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。定义了索引器的类可以让您像访问数组一样的使用 [ ] 运算符访问类的成员。(当然高级的应用还有很多,比如说可以把数组通过索引器映射出去等等)
本文只是简单演示一下索引器的概念和基本的使用方法:
请看代码,下面是类的定义,中间包含了一个索引器定义
[csharp] view plain copy
1. 类的定义
2. public class Person
3. {
4. //定义两个字段信息
5. private string name;
6. private string password;
7.
8. //定义一个 Name 属性来操作 name 字段
9. public string Name
10. {
11. set { name = value; }
12. get { return name; }
13. }
14.
15. //定义一个 Password 属性来操作 password 字段
16. public string Password
17. {
18. set { password = value; }
19. get { return password; }
20. }
21.
22. //定义索引器,name 字段的索引值为 0 ,password 字段的索引值为 1
23. public string this[int index]
24. {
25. get
26. {
27. if (index == 0) return name;
28. else if (index == 1) return password;
29. else return null;
30. }
31. set
32. {
33. if (index == 0) name = value;
34. else if (index == 1) password = value;
35. }
36. }
37. }
下面是使用索引器的方法:
[csharp] view plain copy
1. 索引器使用
2. protected void Page_Load(object sender, EventArgs e)
3. {
4. //声明并实例化这个类
5. Person p = new Person();
6.
7. //使用索引器的方式来给类的两个属性赋值
8. p[0] = "jarod";
9. p[1] = "123456,./";
10.
11. //使用类属性取得两个字段信息
12. Label1.Text = p.Name + " / " + p.Password;
13. }
非常简单,在上面的类中我们把类的 name 字段映射的索引值为 0,而password 字段映射的索引值为 1。有了这个映射就可以使用以下方式为类的 name 和 password 赋值了。
p[0] = "jarod"; //设置 name 字段值
p[1] = "123456,./"; //设置 password 字段值
赋值后,就可以使用属性方法访问到刚刚给两个字段赋的值了。
15、在C#中,下列常量定义正确的是( )
A、Const double PI 3.1415926;
B、Const double e=2.7
C、define double PI 3.1415926
D、define double e=2.7
16、以下c#代码:
usingSystem.Threading;
class App{
public static void Main(){
Timertimer = new Timer(new TimerCallback(CheckStatus),null,0,2000);
Console.Read();
}
static void CheckSatus(Object state){
Console.WriteLine("正在进行检查...")
}
}
在使用代码创建定时器对象的时候,同时指定了定时器的事件,运行时将每隔两秒打印一行“正在运行检查...”,因此,TimerCallback是一个( )
A.委托
B.结构
C.函数
D.类名
21、以下的C#代码段:
public struct Person{
string Name;
int Age;
}
public static void Main(){
Hasbtable A;
Person B;
//其他处理代码
}
以下说法正确的是( )。(选择一项)
A.A为引用类型的变量,B为值类型的变量
B.A为值类型的变量,B为引用类型的变量
C.A和B都是值类型的变量
D.A和 B都是引用类型的变量
24、在C#语言中,下列关于属性的描述正确的是( ).(选择一项)
A.属性系是以public关键字修饰的字段,以public关键字修饰的字段也可称为属性
B.属性是访问字段值的一种灵活机制,属性更好地实现了数据的封装和隐藏
C.要定义只读属性只需在属性名前加上readonly关键字
D.在C#的类中不能自定义属性
28、阅读以下的C#代码:
class A{
public A( ) {
Console.WriteLine("A");
}
}
class B:A{
public B(){
Console.WriteLine("B");
}
}
class Program{
public static void Main(){
B b = new B();
Console.ReadLine();
}
}
上述代码运行后,将在控制台窗口输出( )。
A. A
B. B
C. A B
D.B A
29、在.NET中,以下关于命名空间的描述,正确的是( )。
A.命名空间不可以进行嵌套
B.任一个.cs文件中,只能存在一个命名空间
C.便用private修饰的命名空间,其内部的类也不允许访问
D.命名空间使得代码更加有条理、结构更清晰
30、NET中,程序中的错误可以划分为以下三类,除了( )。
A.逻辑错误
B.运行时错误
C.语法错误
D.自定义错误
31、针对下面的C#代码:
using System;
delegate void D(int i);
class P{
public static void Main(){
V(new D(R)); new D(P.R)
}
public static void R(int t) {
V(21);
}
public static void V(int i){
Console.WriteLine(i.ToString());
Console.ReadLine();
}
}
以下说法正确的是( )
A.代码中存在错误,delegate voidD(int i);不能定义在名称空间或者类之外
B.代码中存在错误,代码行V(new D(R));使用委托错误
C.程序正常运行,输出为0
D.程序正常运行,输出为21
46、下列关于 C# 中索引器理解正确的是 (c)
A、索引器的参数必须是两个或两个以上
B、索引器的参数类型必须是整数型
C、索引器没有名字
D、以上皆非
47、以下关于 ref 和 out 的描述哪些项是正确的? ( 多选 ) ( ACD )
A、使用 ref 参数,传递到 ref 参数的参数必须最先初始化。
B、使用 out 参数,传递到 out 参数的参数必须最先初始化。
C、使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。
D、使用 out 参数,必须将参数作为 out 参数显式传递到方法
48、以下叙述正确的是: (B C )
A、接口中可以有虚方法。
B.、一个类可以实现多个接口。
C.、接口不能被实例化
D.、接口中可以包含已实现的方法。
49、下哪些可以作为接口成员? ( 多选 ) ( ABDE )
A、方法
B、属性
C、字段
D、事件
E、索引器
50、在C#中,下列代码的运行结果是(D)。(选择一项)
Int[]num = new int[5]{1,3,2,0,0}
Array,Reverse(num);
Foreach(intI in num){
Console.Write(i);
}
A.00123
B.12300
C.00132
D.00231
51、在C#中,(c)访问修饰符修饰的变量只能由当前程序集访问。
A.public
B.protected
C.internal
D.private
52、下列属性定义不正确的是C
A、public int ID{get;set;}
B、public int ID{get; private set;}
C、public int ID{get;}
D、prviate int id=0;public intID{get{return id;}{set{id=value;}}}
53、有关lock关键字理解不正确的是D
A、lock关键字是将语句标记为临界区,方法是获取给定的对象的互斥锁,执行该语句,然后释放该锁。
B、lock关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区,如果其他线程试图进入锁定的代码,则它将一直等待,直到该对象释放。
C、lock其实就是Monitor,在代码开始处调用Enter,而在块的结尾调用Exit
D、在程序中鼓励使用lock(this)、lock(typeof(MyType))、Lock(“myLock”)
54、有关接口的实现说法不正确的是C
A、实现接口的类,类中对应的成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名
B、接口实现分位显示实现和隐式实现
C、如果类继承多个接口,并且含有具有相同成员名称的两个接口,如果我们实现接口成员的话,必须使用显示实现接口的方式
D、类的属性和索引器可以为接口上定义的属性或索引器定义额外的访问器
55、有关接口的理解不正确的是C
A、不能实例化接口
B、接口不包括方法的实现
C、接口可以包含事件、索引器、方法、属性、字段
D、类和结构可以从多个接口继承
56、有关接口说法不正确的是C
A、接口可以继承接口
B、类可以继承接口
C、结构体不能继承接口
D、继承接口的任何非抽象类型都必须实现接口的所有成员
57、常用的字符串判空串方法:( A)
A、bool isEmpty = (str.Length==0)
B、bool isEmpty = (str==String.Empty)
C、bool isEmpty = (str=="")
D、都一样
58、在C#中,关于Array和ArrayList的维数,以下说法正确的是(A)。(选择一项)
A. Array可以有多维,而ArrayList只能是一维
B.Array只能是一维,而 ArrayList可以有多维
C.Array和 ArrayList 都只能是一维
D. Array和ArrayList都可以是多维
59、在C#中,下列代码运行后,变量Max的值是(C)(选择一项)Int a=5,b=10,c=15,Max=0;
Max =a>b?a:b;
Max =c<Max?c:Max;
A.0
B.5
C.10
D.15
60、接口是一种引用类型,在接口中可以声明(a),但不可以声明公有的域或私有的成员变量
A、方法、属性、索引器和事件;
B、方法、属性信息、属性;
C、索引器和字段;
D、事件和字段;
61、以下是一些C#中的枚举型的定义,其中错误的用法有()
a)public enumvar1{ Mike = 100, Nike = 102, Jike }
b)public enumvar1{ Mike = 100, Nike, Jike }
c)public enum var1{ Mike=-1 , Nike, Jike }
d)public enum var1{ Mike , Nike , Jike }
62、下列关于构造函数的描述正确的是(c)
A、构造函数可以声明返回类型。
B、构造函数不可以用private修饰
C、构造函数必须与类名相同
D、构造函数不能带参数
63、在.Net中,关于CLR和IL,以处描述正确的是(D)(选择一项)
A.应用程序在CLR环境被编译成IL,IL将能够被任何计算机指令性集成
B..应用程序被编译两次,第一次生成IL,IL在运行时候被CLR快速编译
C.应用程序被编译两次,但是第二次CLR编辑比第一次慢
D.借助CLR,IL被编译成机器代码并且能够在不同的计算机指令集下被执行
64、CLR为.NET提供以下方面的功能或者服务.除了(D)。(选择一项)
A.无用存储单元收集
B.代码验证和类型安全
C.代码访问安全
D.自动消除程序中的逻辑错误
65、有关fixed关键字说法不正确的是C
A、fixed语句禁止垃圾回收器重定位可移动的变量
B、fixed语句只能出现在不安全上下文中
C、fixed语句可以在数据结构或类中创建带有固定大小数组的缓冲区
D、fixed语句用于创建固定数组时,数组类型只能是bool、byte、char、short、int、long、sbyte、ushort、uint、ulong、float、double中的一种。
66、下列那个类型是引用类型的是C
A、enum类型
B、struct类型
C、String类型
D、int类型
67、有关属性(System.Attribute)是用于P/Invoke的属性类型是C
A、CoditionalAttribute
B、ObsoleteAttribute
C、DllImportAttribute
D、AttributeUsageAttribute
68、有关属性(System.Attribute)是根据预处理标识符执行方法的属性类型是C
A、CoditionalAttribute
B、ObsoleteAttribute
C、DllImportAttribute
D、AttributeUsageAttribute
69、有关异步委托Control.BeginInvoke(界面)和myDelegate.BeginInvoek实现方式说法正确的B
A、Conrol.BeginInvoek和MyDelegate.BeginInvoek都是使用PostMessage发送消息。
B、Conrol.BeginInvoek是使用PostMessage发送消息,MyDelegate.BeginInvoek是使用线程池的
C、Conrol.BeginInvoek和MyDelegate.BeginInvoek都是使用线程池的
D、Conrol.BeginInvoek是使用线程池的,MyDelegate.BeginInvoek是使用PostMessage发送消息
70、& 和&&的区别是A
A、&是算术”与”运算符,用于整形和bool;&&是条件”与”运算符,仅用于bool
B、&和&&是算术”与”运算符,用于整形和bool
C、&&是算术”与”运算符,用于整形和bool;&是条件”与”运算符,仅用于bool
D、&和&&是条件”与”运算符,仅用于bool
c#面试3(选择题)的更多相关文章
- <七>阅读<<大话设计模式>>该模板模型
哈哈,没想到.在不知不觉中拥有第七书面文章,看来我仍然非常有毅力. 上坚持一件事非常easy,仅仅要你每天不断的朝着自己的目标出发,不论什么事情都不会挡着你.好了大道理不多说,谁都懂.那看看这个模板模 ...
- 携程Java工程师——一道面向对象面试选择题(转)
public class Base { private String baseName = "base"; public Base() { callName(); } public ...
- WEB前端面试选择题解答(共36题)
第1题 ["1", "2", "3"].map(parseInt) A:["1", "2", &qu ...
- 20道Java实习生笔试面试选择题(内附答案解析)
1.以下对继承的描述错误的是(A) A.Java中的继承允许一个子类继承多个父类 B.父类更具有通用性,子类更具体 C.Java中的继承存在的传递性 D.当实例化子类时会递归调用父类中的构造方法 解 ...
- [Java面经] 关于面试的二三事.
今天终于闲下来了, 那么也好总结下这几天面试的经历.四天的时间一共面了七家, 有一家是自己推迟了没有去.声明:如若转载请注明出处:http://www.cnblogs.com/wang-meng/p/ ...
- [转]9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...
- 一个java实习生两周八次的面试经历
以前从来没有因为求职出去面试过,一直觉得面试很可怕,没想到最近两周我也成为了面霸,两周面试八次,我的找工作之路就这样开始了!大概两个星期之前,我看着自己在招聘网站上写好的简历连投出去的勇气都没有,战战 ...
- python面试大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- .NET软件工程师面试总结
1.手写画出系统架构图,系统代码架构,有什么技术难点? 2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...
随机推荐
- LeetCode解题报告—— Best Time to Buy and Sell Stock
Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a gi ...
- jquery datatable客户端分页保持
请加入下面注释的参数,并强制刷新浏览器,即可解决,关键配置: "bStateSave":true, $("#tableID").DataTable({ &quo ...
- thinkphp5.1使用phpstudy隐藏index.php
apache的重写规则如下: <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on R ...
- 易普优APS应用案例:线束行业生产计划排产
一.线束行业生产现状 (1)产品种类以及标准繁多,生产计划难协调 线束行业的生产,虽然原材料不多,但线束产品却多达几万种.一般线束企业,虽然不是每个月都生产数万种产品,但每月生产的产品品种在300种以 ...
- logstash通过tcp收集日志
(1)标准输入输出tcp模块 1.修改配置文件 #vim /etc/logstash/conf.d/tcp.conf input { tcp { port => "5600" ...
- thinkphp5.0配置加载
ThinkPHP支持多种格式的配置格式,但最终都是解析为PHP数组的方式. PHP数组定义 返回PHP数组的方式是默认的配置定义格式,例如: //项目配置文件 return [ // 默认模块名 'd ...
- Redis学习篇(十二)之管道技术
通过管道技术降低往返时延 当后一条命令不依赖于前一条命令的返回结果时,可以使用管道技术将多条命令一起 发送给redis服务器,服务器执行结束之后,一起返回结果,降低了通信频度.
- hibernate4日志配置
在平时运行程序时控制台有很对的日志打印,本文说明如何控制这些日志打印. 1.确定要使用日志的实现,我在这使用的是log4j. 2.加入log4j的api包slf4j-api.jar,log4j的转换包 ...
- 山东省第四届ACM程序设计竞赛A题:Rescue The Princess
Description Several days ago, a beast caught a beautiful princess and the princess was put in prison ...
- Codeforces 1037 H. Security
\(>Codeforces \space 1037\ H. Security<\) 题目大意 : 有一个串 \(S\) ,\(q\) 组询问,每一次给出一个询问串 \(T\) 和一个区间 ...