1. 一.填空题(每空1分,共12分)
  2. 1面向对象的语言具有__封装______性、__继承_______性、__多态______性。
  3. 2能用foreach遍历访问的对象需要实现 ____Ienumerable____________接口或声明_____GetEnumerator___________方法的类型。
  4. 3当类T只声明了私有实例构造函数时,则在T的程序文本外部,___不可以___(可以 or 不可以)从T派生出新的类,在T的内部__可以__(可以 or 不可以)直接创建T的任何实例,在T的外部__不可以__(可以 or 不可以)直接创建T的任何实例。
  5. . 委托声明的关键字是__Delegate____
  6. . override与重载的区别: override覆盖是基类中函数的重写。重载:方法或函数的名称相同,参数或许参数类型不同,进行多次重载实现功能。
  7. 二. 不定项选择(每题2分,共18)
  8. Question
  9. 以下叙述正确的是:
  10. A. 接口中可以有虚方法。 B. 一个类可以实现多个接口。
  11. C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。
  12. Question
  13. 以下描述错误的是()
  14.   . C++中支持抽象类而在C#中不支持抽象类。
  15.   . C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。
  16.   . C#中可使用 new 修饰符显式隐藏从基类继承的成员。
  17. . C#中要在派生类中重新定义基类的虚函数必须在前面加Override。
  18. Question
  19.   声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是
  20.   . void myCallBack(int x)
  21.   . int receive(int num)
  22.   . string receive(int x)
  23. . 不确定的
  24. Question
  25. 下列描述错误的是()
  26. a) 类不可以多重继承而接口可以;
  27. b) 抽象类自身可以定义成员而接口不可以;
  28. c) 抽象类和接口都不能被实例化;
  29. d) 一个类可以有多个基类和多个基接口;
  30. Question
  31. 下列关于构造函数的描述正确的是()
  32. a) 构造函数可以声明返回类型。
  33. b) 构造函数不可以用private修饰
  34. c) 构造函数必须与类名相同
  35. d) 构造函数不能带参数
  36. Question
  37. 接口是一种引用类型,在接口中可以声明( ),但不可以声明公有的域或私有的成员变量。
  38. a) 方法、属性、索引器和事件;
  39. b) 方法、属性信息、属性;
  40. c) 索引器和字段;
  41. d) 事件和字段;
  42. Question
  43. 以下的C#代码,试图用来定义一个接口:
  44. public interface IFile
  45. {
  46. int A;
  47. int delFile()
  48. {
  49. A = ;
  50. }
  51. void disFile();
  52. }
  53. 关于以上的代码,以下描述错误的是( )。
  54. a) 以上的代码中存在的错误包括:不能在接口中定义变量,所以int A代码行将出现错误;
  55. b) 以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数;
  56. c) 代码void disFile();声明无错误,接口可以没有返回值;
  57. d) 代码void disFile();应该编写为void disFile(){};
  58.  
  59. Question .
  60. class Class1
  61. {
  62. public static int Count = ;
  63. static Class1()
  64. {
  65. Count++;
  66. }
  67. public Class1()
  68. {
  69. Count++;
  70. }
  71. }
  72. Class1 o1 = new Class1();
  73. Class1 o2 = new Class1();
  74.   请问,Class1.Count的值是多少?( )
  75.    .
  76.    .
  77.    .
  78.    .
  79. Question
  80. abstract class BaseClass
  81. {
  82. public virtual void MethodA()
  83. {
  84. Console.WriteLine("BaseClass");
  85. }
  86. public virtual void MethodB()
  87. {
  88. }
  89. }
  90. class Class1: BaseClass
  91. {
  92. public void MethodA()
  93. {
  94. Console.WriteLine("Class1");
  95. }
  96. public override void MethodB()
  97. {
  98. }
  99. }
  100. class Class2: Class1
  101. {
  102. new public void MethodB()
  103. {
  104. }
  105. }
  106. class MainClass
  107. {
  108. public static void Main(string[] args)
  109. {
  110. Class2 o = new Class2();
  111. o.MethodA();
  112. }
  113. }
  114.   请问,此程序输出结果是:
  115.    . BaseClass
  116.    . BassClass Class1
  117.    . Class1
  118.    . Class1 BassClass
  119. (解析,三重继承问题,孙类只是继承父类,而不是直接继承祖父类)
  120. 三.问答题(每题3分,共15分)
  121. . 简述 private protected public internal 修饰符的访问权限。
  122. private:私有访问,它只能在声明自身的类中进行访问。
  123. protected:表示受保护的访问,该类内部和继承类中可以访问
  124. .public :表示公共访问,在代码任何位置都可对其进行访问
  125. internal表示内部成员,在同一命名空间内可以访问。
  126. . C#中的委托是什么?事件是不是一种委托?
  127. 委托是指具有相同属性(也称具有相同的函数签名:返回类型相同,参数类型、参数顺序及参数个数相同)的函数或方法的抽象,关键字为delegate。主要用途是三个:)函数回调;)传递方法;)事件机制
  128. 事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托,对事件的声明, 实际是声明一个私有的委托变量,对委托变量进行封装,即委托变量加上event关键字后,不管其前面的访问修饰符是public还是private,编译器都会将其编译为private
  129. 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。以委托为参数的函数具有一定的通用性。
  130. 使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
  131. . abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
  132. 不可以一起使用,但是可以和override一起使用。
  133. . 请叙述属性与索引器的区别。
  134.  
  135. 属性:它是存取类的字段,索引器:Indexer它是特殊的属性,用它可以使用户像访问数组一样访问类的成员。
  136.  
  137. . 请详述在dotnet中类(class)与结构(struct)的异同。
  138.  
  139. class可以进行实例化,它是引用类型,内存分配在栈中,效率高,它有默认的构造函数,有析构函数可以使用 abstract sealed protected 修饰符。要用new进行初始化,
  140.  
  141. 结构它是属于值类型,内存分配在堆中,效率低,它没有默认的构造函数,但是可以添加构造函数,没有析构函数没有 abstract sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化,但是可以在结构中初始化实例字段。
  142.  
  143. 四.分析程序(每题5分,共25分) (此题不能调试,若发现调试,扣除分数)
  144. . 写出程序的输出结果
  145. class Class1 {
  146. private string str = "Class1.str";
  147. private int i = ;
  148. static void StringConvert(string str) {
  149. str = "string being converted.";
  150. }
  151. static void StringConvert(Class1 c) {
  152. c.str = "string being converted.";
  153. }
  154. static void Add(int i) {
  155. i++;
  156. }
  157. static void AddWithRef(ref int i) {
  158. i++;
  159. }
  160. static void Main() {
  161. int i1 = ;
  162. int i2 = ;
  163. string str = "str";
  164. Class1 c = new Class1();
  165. Add(i1);
  166. AddWithRef(ref i2);
  167. Add(c.i);
  168. StringConvert(str);
  169. StringConvert(c);
  170. Console.WriteLine(i1);
  171. Console.WriteLine(i2);
  172. Console.WriteLine(c.i);
  173. Console.WriteLine(str);
  174. Console.WriteLine(c.str);
  175. }
  176. }
  177.  
  178. str
  179. string being converted
  180. .写出程序的输出结果
  181. public abstract class A
  182. {
  183. public A()
  184. {
  185. Console.WriteLine('A');
  186. }
  187. public virtual void Fun()
  188. {
  189. Console.WriteLine("A.Fun()");
  190. }
  191. }
  192. public class B: A
  193. {
  194. public B()
  195. {
  196. Console.WriteLine('B');
  197. }
  198.  
  199. public override void Fun()
  200. {
  201. Console.WriteLine("B.Fun()");
  202. }
  203.  
  204. public static void Main()
  205. {
  206. A a = new B();
  207. a.Fun();
  208. }
  209. }
  210.  
  211. 解析:主函数 A a = new B();首先声明了一个A的对象a,但被赋给不同于A的对象B,在此期间分别调用了A类的构造函数和B类的构造函数,然后调用afun()函数,因为afun()函数是虚函数,被bfun()的函数覆盖,所以实际执行的是bfun().
  212. 答案:
  213. A
  214.  
  215. B
  216.  
  217. B.Fun()
  218.  
  219. .写出程序的输出结果:
  220. public class A
  221. {
  222. public virtual void Fun1(int i)
  223. {
  224. Console.WriteLine(i);
  225. }
  226.  
  227. public void Fun2(A a)
  228. {
  229. a.Fun1();
  230. Fun1();
  231. }
  232. }
  233. public class B : A
  234. {
  235. public override void Fun1(int i)
  236. {
  237. base.Fun1 (i + );
  238. }
  239.  
  240. public static void Main()
  241. {
  242. B b = new B();
  243. A a = new A();
  244. b.Fun2(a);
  245. a.Fun2(b);
  246. }
  247. }
  248. 输出结果为:
  249.  
  250. (一个函数的执行必须在一个具体的对象中实现,如果函数明确告诉是哪个对象,则在改该对象下执行;如果没有,则在默认的对象下执行)
  251. . 在下面的例子里
  252. using System;
  253. class A
  254. {
  255. public A()
  256. {
  257. PrintFields();
  258. }
  259. public virtual void PrintFields(){}
  260. }
  261. class B:A
  262. {
  263. int x=;
  264. int y;
  265. public B()
  266. {
  267. y=-;
  268. }
  269. public override void PrintFields()
  270. {
  271. x += ;
  272. Console.WriteLine("x={0},y={1}",x,y);
  273. y += ;
  274. }
  275. 当使用B b = new B()创建的实例时,产生什么输出?b. PrintFields();结果是什么?
  276. X=,y=
  277. b. PrintFields 结果是x=;y=
  278.  
  279. . 下面的例子中
  280.  
  281. using System;
  282. class A
  283. {
  284. public static int X;
  285. static A()
  286. {
  287. X=B.Y+;
  288. }
  289. }
  290. class B
  291. {
  292. public static int Y=A.X+;
  293. static B()
  294. { }
  295. static void Main()
  296. {
  297. Console.WriteLine("X={0},Y={1}",A.X,B.Y);
  298. }
  299. }
  300. 产生的输出结果是什么?
  301. X=,Y=
  302. 五.程序设计(每题7分,共28分)
  303. . 请编程实现一个冒泡排序算法?
  304. //比较法
  305. using System;
  306. using System.Collections.Generic;
  307. using System.Text;
  308.  
  309. namespace test1
  310. {
  311. class Program
  312. {
  313. static void Main(string[] args)
  314. {
  315. int[] Array ={ ,,,,,,};
  316. Console.WriteLine("排序前的数组:");
  317. foreach(int n in Array)
  318. {
  319. Console.Write(n+" ");
  320. }
  321. Console.WriteLine();
  322. for (int i = ; i < Array.Length; i++) //控制趟数
  323. {
  324. for (int j = ; j < Array.Length - i; j++)
  325. {
  326. if (Array[j] > Array[j + ]) //交换
  327. {
  328. int temp = Array[j]; Array[j] = Array[j + ]; Array[j + ] = temp;
  329. }
  330. }
  331. }
  332. //排序后
  333. Console.WriteLine("排序后的数组:");
  334. for (int n = ; n < Array.Length; n++)
  335. {
  336. Console.Write(Array[n] + " ");
  337. }
  338. Console.WriteLine();
  339. }
  340. }
  341. }
  342. . 编程程序实现委托,事件。
  343. using System;
  344. using System.Collections.Generic;
  345. using System.Text;
  346.  
  347. namespace delegateDemo
  348. {
  349. class Program
  350. {
  351. static void Main(string[] args)
  352. {
  353. Cat cat = new Cat();
  354. Mouse mouse = new Mouse();
  355. Master master = new Master();
  356. cat.Calling += new EventHandler(mouse.Escape);
  357. cat.Calling += new EventHandler(master.Wakened);
  358. cat.Call();
  359. }
  360. }
  361. public sealed class Cat //猫类
  362. {
  363. public event EventHandler Calling;
  364. public void Call()
  365. {
  366. Console.WriteLine("猫开始叫了……");
  367. if(Calling!=null) //检查事件是否被注册
  368. Calling(this,EventArgs.Empty);//调用事件注册的方法
  369. }
  370. }
  371. public sealed class Mouse //老鼠类
  372. {
  373. public void Escape(object sender, EventArgs e)
  374. {
  375. Console.WriteLine("老鼠逃跑了...");
  376. }
  377. }
  378. public sealed class Master //主人
  379. {
  380. public void Wakened(object sender, EventArgs e)
  381. {
  382. Console.WriteLine("主人惊醒了...");
  383. }
  384.  
  385. }
  386. }
  387.  
  388. . 写一个程序,语言不限,打印出100的阶乘(即1***…*)的精确数值结果(不能是浮点数)。如5的阶乘是1****=。
  389. using System;
  390. using System.Collections.Generic;
  391. using System.Text;
  392. //,打印出100的阶乘(即1*2*3*…*100)的精确数值结果(不能是浮点数)。如5的阶乘是1*2*3*4*5=120
  393. namespace shuzu
  394. {
  395. class Program
  396. {
  397. static void Main(string[] args)
  398. {
  399. Console.WriteLine("请输入一个正数");
  400. int n = int.Parse(Console.ReadLine());
  401. Console.WriteLine("{0}的阶乘1*2*3*…*{1}={2}", n,n,Fn(n));
  402. }
  403. public static double Fn(int n)
  404. {
  405. if (n==)
  406. {
  407. return ;
  408. }
  409. else
  410. {
  411. return n * Fn(n - );
  412. }
  413. }
  414. }
  415. }
  416.  
  417. . 写一个程序,语言不限,能将人民币金额从阿拉伯数字转换为大写汉字表示。例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。
  418. using System;
  419. using System.Collections.Generic;
  420. using System.Text;
  421.  
  422. namespace ConsoleApplication1
  423. {
  424. class Program
  425. {
  426. static void Main(string[] args)
  427. {
  428. Console.WriteLine("请输入数字:");
  429. string s = Console.ReadLine();
  430. Console.Write("转换后¥:");
  431. for (int i = ; i < s.Length; i++)
  432. {
  433. //switch(Convert.ToInt32(Console.ReadLine()))
  434. switch (s[i] - )
  435. {
  436. case :
  437. Console.Write("零");
  438. break;
  439. case :
  440. Console.Write("壹");
  441. break;
  442. case :
  443. Console.Write("贰");
  444. break;
  445. case :
  446. Console.Write("叁");
  447. break;
  448. case :
  449. Console.Write("肆");
  450. break;
  451. case :
  452. Console.Write("伍");
  453. break;
  454. case :
  455. Console.Write("陆");
  456. break;
  457. case :
  458. Console.Write("柒");
  459. break;
  460. case :
  461. Console.Write("捌");
  462. break;
  463. case :
  464. Console.Write("玖");
  465. break;
  466. case :
  467. Console.Write("拾");
  468. break;
  469. default:
  470. Console.Write("输入其他字符");
  471. break;
  472. }
  473. }
  474. Console.WriteLine();
  475. Console.Read();
  476.  
  477. }
  478. }
  479. }
  480.  
  481. 六.附加题(12分)
  482. 一列数的规则如下: 、、、、、、、、...... 求第30位数是多少, 用递归算法实现。(C#语言)
  483. using System;
  484. using System.Collections.Generic;
  485. using System.Text;
  486. // 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现
  487. namespace rabbit
  488. {
  489. class Program
  490. {
  491. static void Main(string[] args)
  492. {
  493. Console.WriteLine("请输入个正数:");
  494. int I= int.Parse(Console.ReadLine());
  495. Console.WriteLine("第{0}个数字是{1}", I, Fn(I));
  496. }
  497. static int Fn(int n)
  498. {
  499. if ( n == || n == )
  500. {
  501. return ;
  502. }
  503. else
  504. {
  505. return Fn(n - ) + Fn(n - );
  506. }
  507. }
  508. }
  509. }

.net软件工程师面试题(参考答案)的更多相关文章

  1. 《招聘一个靠谱的iOS》面试题参考答案(下)

    相关文章: <招聘一个靠谱的iOS>面试题参考答案(上) 说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外 ...

  2. .NET高级软件工程师面试题排行榜(转载)

    原文引用:https://m.sanwen8.cn/p/104gMSd.html 一.对于 Web 性能优化,您有哪些了解和经验吗? 出现指数:五颗星 主要考点:这道题是博主在博客园的新闻里面看到的, ...

  3. Java高级软件工程师面试题

    Java 软件高级工程师笔试题 [智力部分](30分) 1. 烧一根不均匀的绳要用一个小时,如何用它来判断半个小时?(5分) 两头同时烧 2. 4,4,10,10,加减乘除,怎么出24点?四个数字分别 ...

  4. PHP面试题2019年京东工程师面试题及答案解析

    一.单选题(共28题,每题5分) 1.Apache与Nginx大访问下性能描述正确的是? A.Apache所采用的epoll网络I/O模型非常高效 B.Nginx使用了最新的kqueue和select ...

  5. PHP面试题2019年滴滴出行工程师面试题及答案解析

    一.单选题(共30题,每题5分) 1.下列关于PHP垃圾回收的说法,错误的是? A.开启/关闭垃圾回收机制可以通过修改php配置实现 B.可以在程序中使用gc_enable() 和 gc_disabl ...

  6. 嵌入式Linux软件工程师面试题一

    题一,同步和异步有啥区别? 题二,TCP与UDP有啥区别? 题三,进程和线程有啥区别? 题一答案: 同步(Sync):所有的操作都做完,才返回给用户.这样用户在线等待的时间太长,给用户一种卡死了的感觉 ...

  7. PHP面试题2019年百度工程师面试题及答案解析

    一.单选题(共10题,每题5分) 1.以下代码输出的结果是? ​​​ A.[0,1,2,3] B.[1,3,5,7,5] C.[1,2,3,4,5] D.[0,1,2,3,5] 参考答案:D 答案解析 ...

  8. PHP面试题2019年新浪工程师面试题及答案解析

    一.单选题(共28题,每题5分) 1.以下语句输出的结果是什么? A.3$a\$a3336 B.33\$a3336 C.$a$a\$a3336 D.3$a\$a333$a$a 参考答案:A 答案解析: ...

  9. PHP面试题2019年小米工程师面试题及答案解析

    一.单选题(共29题,每题5分) 1.PHP面向对象方法重写描述错误的是? A.子类必须继承父类 B.子类可以重写父类已有方法 C.重写之后子类会调用父类方法 D.子类也可以具有与父类同名的属性,进行 ...

  10. PHP面试题2019年腾讯工程师面试题和答案

    一.单选题(共29题,每题5分) 1.PHP执行的时候有如下执行过程:Scanning(Lexing) - Compilation - Execution - Parsing,其含义分别为: A.将P ...

随机推荐

  1. HDOJ/HDU 1865 1sting(斐波拉契+大数~)

    Problem Description You will be given a string which only contains '1'; You can merge two adjacent ' ...

  2. java常见错误云集与注意事项

    1.安装Eclipse时,尽量jdk不要用jre,jdk包含jre j JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环 ...

  3. js实现table中前端搜索(模糊查询)

    项目中用到js前端搜索功能,根据 姓名或姓名 进行 搜索,实现方法如下,遍历table所有行中的某列,符合条件则置tr为display:'',不满足条件置tr为display:none. 代码如下: ...

  4. PDF模板报表导出(Java+Acrobat+itext)

    1. 首先要安装Adobe Acrobat,装好之后用Acrobat从一个word,excel或者pdf中转换一个pdf模板,我做的模板很简单,直接写一个简单的word再生成一个pdf表单,之后编辑文 ...

  5. cocos2d&amp;cocos2dx学习资源

    汇总一下自己学习Cocos2d和cocos2dx认为比較好的一些资源: 书籍: <iPhone&iPad cocos2d游戏开发实战> Steffen Itterheim < ...

  6. hdu1043Eight (经典的八数码)(康托展开+BFS)

    建议先学会用康托展开:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description The 15-puzzle ...

  7. auth tips

    https://scotch.io/tutorials/easy-node-authentication-setup-and-local https://scotch.io/tutorials/upg ...

  8. TCP/IP协议原理与应用笔记02:断点续传

    1.断点续传简介:       FTP(文件传输协议的简称)(File Transfer Protocol. FTP)客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人 ...

  9. atoi、stoi、strtoi区别

    首先atoi和strtol都是c里面的函数,他们都可以将字符串转为int,它们的参数都是const char*,因此在用string时,必须调c_str()方法将其转为char*的字符串.或者atof ...

  10. Java_Activiti5_菜鸟也来学Activiti5工作流_之JUnit单元测试(四)

    /**ActivitiSpringJuinitTest.java * author : 冯孟活 ^_^ * dates : 2015年9月2日 下午2:16:54 * class : activiti ...