2022年C程序员面试必答.doc

上传人:de****x 文档编号:69367217 上传时间:2023-01-02 格式:DOC 页数:28 大小:99KB
返回 下载 相关 举报
2022年C程序员面试必答.doc_第1页
第1页 / 共28页
2022年C程序员面试必答.doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《2022年C程序员面试必答.doc》由会员分享,可在线阅读,更多相关《2022年C程序员面试必答.doc(28页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C# 程序员面试必答1.静态变量和非静态变量的区别? 答: 静态变量: 静态变量使用 static 修饰符进展声明 在所属类被装载时创立 通过类进展访咨询 所属类的所有实例的同一静态变量都是同一个值 非静态变量: 不带有 static 修饰符声明的变量称做非静态变量 在类被实例化时创立 通过对象进展访咨询 同一个类的不同实例的同一非静态变量能够是不同的值 例如: using System;using System.Collections.Generic;using System.Text;namespace Example01 class Program class Class1 public

2、 static String staticStr = quot;Classquot; public String notstaticStr = quot;Objquot; static void Main(string args) /静态变量通过类进展访咨询,该类所有实例的同一静态变量都是同一个值 Console.WriteLine(quot;Class1s staticStr: 0quot;, Class1.staticStr); Class1 tmpObj1 = new Class1(); tmpObj1.notstaticStr = quot;tmpObj1quot; Class1 tm

3、pObj2 = new Class1(); tmpObj2.notstaticStr = quot;tmpObj2quot; /非静态变量通过对象进展访咨询,不同对象的同一非静态变量能够有不同的值 Console.WriteLine(quot;tmpObj1s notstaticStr: 0quot;, tmpObj1.notstaticStr); Console.WriteLine(quot;tmpObj2s notstaticStr: 0quot;, tmpObj2.notstaticStr); Console.ReadLine(); 复制代码结果: Class1s staticStr:

4、Class tmpObj1s notstaticStr: tmpObj1 tmpObj2s notstaticStr: tmpObj2 2.const 和 static readonly 区别? 答: const 用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序 static readonly 用 static readonly 修饰符声明的成员仍然是变量,只不过具有和常量类似的使用方法:通过类进展访咨询、初始化后不能够修正。但与常量不同的是这种变量是在运转期初始化 例如: 测试类: using System;using System.Collections.Gene

5、ric;using System.Text;namespace Example02Lib public class Class1 public const String strConst = quot;Constquot; public static readonly String strStaticReadonly = quot;StaticReadonlyquot; /public const String strConst = quot;Const Changedquot; /public static readonly String strStaticReadonly = quot;S

6、taticReadonly Changedquot; /5-1-a-s-p-x复制代码客户端代码: using System;using System.Collections.Generic;using System.Text;using Example02Lib;namespace Example02 class Program static void Main(string args) /修正Example02中Class1的strConst初始值后,只编译Example02Lib工程 /然后到资源治理器里把新编译的Example02Lib.dll拷贝Example02.exe所在的目录,

7、执行Example02.exe /切不可在IDE里直截了当调试运转由于这会重新编译整个处理方案! /能够看到strConst的输出没有改变,而strStaticReadonly的输出已经改变 /说明Const变量是在编译期初始化并嵌入到客户端程序,而StaticReadonly是在运转时初始化的 Console.WriteLine(quot;strConst : 0quot;, Class1.strConst); Console.WriteLine(quot;strStaticReadonly : 0quot;, Class1.strStaticReadonly); Console.ReadL

8、ine(); 复制代码结果: strConst : Const strStaticReadonly : StaticReadonly 修正后的例如: 测试类: using System;using System.Collections.Generic;using System.Text;namespace Example02Lib public class Class1 /public const String strConst = quot;Constquot; /public static readonly String strStaticReadonly = quot;StaticRea

9、donlyquot; public const String strConst = quot;Const Changedquot; public static readonly String strStaticReadonly = quot;StaticReadonly Changedquot; 复制代码结果 strConst : Const strStaticReadonly : StaticReadonly Changed 3.extern 是什么意思? 答: extern 修饰符用于声明由程序集外部实现的成员函数 经常用于系统API函数的调用(通过 DllImport )。留意,和Dll

10、Import一起使用时要加上 static 修饰符 也能够用于关于同一程序集不同版本组件的调用(用 extern 声明别名) 不能与 abstract 修饰符同时使用51aspx 例如: using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace Example03 class Program /留意DllImport是一个Attribute Property,在System.Runtime.InteropServices命名空间中定

11、义 /extern与DllImport一起使用时必须再加上一个static修饰符 DllImport(quot;User32.dllquot;) public static extern int MessageBox(int Handle, string Message, string Caption, int Type); static int Main() string myString; Console.Write(quot;Enter your message: quot;); myString = Console.ReadLine(); return MessageBox(0, my

12、String, quot;My Message Boxquot;, 0); 复制代码结果: 4.abstract 是什么意思? 答: abstract 修饰符能够用于类、方法、属性、事件和索引指示器(indexer),表示其为抽象成员 abstract 不能够和 static 、virtual 、override 一起使用 声明为 abstract 成员能够不包括实现代码,但只有类中还有未实现的抽象成员,该类就不能够被实例化,通常用于强迫继承类必须实现某一成员 例如: using System;using System.Collections.Generic;using System.Text

13、;namespace Example04 #region 基类,抽象类 public abstract class BaseClass /抽象属性,同时具有get和set访咨询器表示继承类必须将该属性实现为可读写 public abstract String Attribute get; set; /抽象方法,传入一个字符串参数无返回值 public abstract void Function(String value); /抽象事件,类型为系统预定义的代理(delegate):EventHandler public abstract event EventHandler Event; /抽

14、象索引指示器,只具有get访咨询器表示继承类必须将该索引指示器实现为只读 public abstract Char thisint Index get; #endregion #region 继承类 public class DeriveClass : BaseClass private String attribute; public override String Attribute get return attribute; set attribute = value; public override void Function(String value) attribute = val

15、ue; if (Event != null) Event(this, new EventArgs(); public override event EventHandler Event; public override Char thisint Index get return attributeIndex; #endregion class Program static void OnFunction(object sender, EventArgs e) for (int i = 0; i (DeriveClass)sender).Attribute.Length; i+) Console

16、.WriteLine(DeriveClass)sender)i); static void Main(string args) DeriveClass tmpObj = new DeriveClass(); tmpObj.Attribute = quot;1234567quot; Console.WriteLine(tmpObj.Attribute); /将静态函数OnFunction与tmpObj对象的Event事件进展关联 tmpObj.Event += new EventHandler(OnFunction); tmpObj.Function(quot;7654321quot;); Co

17、nsole.ReadLine(); 复制代码结果: 1234567 7 6 5 4 3 2 1 5.internal 修饰符起什么作用? 答: internal 修饰符能够用于类型或成员,使用该修饰符声明的类型或成员只能在同一程集内访咨询 接口的成员不能使用 internal 修饰符 例如 Example05Lib 工程的 Class1 using System;using System.Collections.Generic;using System.Text;namespace Example05Lib public class Class1 internal String strInte

18、rnal = null; public String strPublic; 复制代码结果 Example05Lib 工程的 Class2 类能够访咨询到 Class1 的 strInternal 成员 Example05 工程的 Program 类无法访咨询到 Class1 的 strInternal 成员 6.sealed 修饰符是干什么的? 答: sealed 修饰符表示密封 用于类时,表示该类不能再被继承,不能和 abstract 同时使用,由于这两个修饰符在含义上互相排挤 用于方法和属性时,表示该方法或属性不能再被继承,必须和 override 关键字一起使用,由于使用 sealed

19、修饰符的方法或属性确信是基类中相应的虚成员 通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次构造体系混乱 恰当的利用 sealed 修饰符也能够提高一定的运转效率,由于不用考虑继承类会重写该成员 例如: using System;using System.Collections.Generic;using System.Text;namespace Example06 class Program class A public virtual void F() Console.WriteLine(quot;A.Fquot;); public virtual

20、 void G() Console.WriteLine(quot;A.Gquot;); class B : A public sealed override void F() Console.WriteLine(quot;B.Fquot;); public override void G() Console.WriteLine(quot;B.Gquot;); class C : B public override void G() Console.WriteLine(quot;C.Gquot;); static void Main(string args) new A().F(); new A

21、().G(); new B().F(); new B().G(); new C().F(); new C().G(); Console.ReadLine(); 复制代码结果: 类 B 在继承类 A 时能够重写两个虚函数,如下图: 由于类 B 中对 F 方法进展了密封, 类 C 在继承类 B 时只能重写一个函数,如下图: 操纵台输出结果,类 C 的方法 F 只能是输出 类B 中对该方法的实现: A.F A.G B.F B.G B.F C.G 7.override 和 overload 的区别? 答: override 表示重写,用于继承类对基类中虚成员的实现 overload 表示重载,用于同一

22、个类中同名方法不同参数(包括类型不同或个数不同)的实现 例如: using System;using System.Collections.Generic;using System.Text;namespace Example07 class Program class BaseClass public virtual void F() Console.WriteLine(quot;BaseClass.Fquot;); class DeriveClass : BaseClass public override void F() base.F(); Console.WriteLine(quot;

23、DeriveClass.Fquot;); public void Add(int Left, int Right) Console.WriteLine(quot;Add for Int: 0quot;, Left + Right); public void Add(double Left, double Right) Console.WriteLine(quot;Add for int: 0quot;, Left + Right); static void Main(string args) DeriveClass tmpObj = new DeriveClass(); tmpObj.F();

24、 tmpObj.Add(1, 2); tmpObj.Add(1.1, 2.2); Console.ReadLine(); 复制代码结果: BaseClass.F DeriveClass.F Add for Int: 3 Add for int: 3.3 8.什么是索引指示器? 答: 实现索引指示器(indexer)的类能够象数组那样使用事实上例后的对象,但与数组不同的是索引指示器的参数类型不仅限于int 简单来说,其本质确实是一个含参数属性 例如: using System;using System.Collections.Generic;using System.Text;namespace

25、 Example08 public class Point private double x, y; public Point(double X, double Y) x = X; y = Y; /重写ToString方法方便输出 public override string ToString() return String.Format(quot;X: 0 , Y: 1quot;, x, y); public class Points Point points; public Points(Point Points) points = Points; public int PointNumb

26、er get return points.Length; /实现索引访咨询器 public Point thisint Index get return pointsIndex; /感激watson hua(:/blogs/)的指点 /索引指示器的本质是含参属性,参数并不只限于int class WeatherOfWeek public string thisint Index get /留意case段使用return直截了当返回因而不需要break switch (Index) case 0: return quot;Today is cloudy!quot; case 5: return

27、quot;Today is thundershower!quot; default: return quot;Today is fine!quot; public string thisstring Day get string TodayWeather = null; /switch的标准写法 switch (Day) case quot;Sundayquot;: TodayWeather = quot;Today is cloudy!quot; break; case quot;Fridayquot;: TodayWeather = quot;Today is thundershower!

28、quot; break; default: TodayWeather = quot;Today is fine!quot; break; return TodayWeather; class Program static void Main(string args) Point tmpPoints = new Point10; for (int i = 0; i tmpPoints.Length; i+) tmpPointsi = new Point(i, Math.Sin(i); Points tmpObj = new Points(tmpPoints); for (int i = 0; i

29、 tmpObj.PointNumber; i+) Console.WriteLine(tmpObji); string Week = new string quot;Sundayquot;, quot;Mondayquot;, quot;Tuesdayquot;, quot;Wednesdayquot;, quot;Thursdayquot;, quot;Fridayquot;, quot;Staurdayquot; WeatherOfWeek tmpWeatherOfWeek = new WeatherOfWeek(); for (int i = 0; i 6; i+) Console.Wr

30、iteLine(tmpWeatherOfWeeki); foreach (string tmpDay in Week) Console.WriteLine(tmpWeatherOfWeektmpDay); Console.ReadLine(); 复制代码结果: X: 0 , Y: 0 X: 1 , Y: 0.841470984807897 X: 2 , Y: 0.909297426825682 X: 3 , Y: 0.141120008059867 X: 4 , Y: -0.756802495307928 X: 5 , Y: -0.958924274663138 X: 6 , Y: -0.27

31、9415498198926 X: 7 , Y: 0.656986598718789 X: 8 , Y: 0.989358246623382 X: 9 , Y: 0.412118485241757 Today is cloudy! Today is fine! Today is fine! Today is fine! Today is fine! Today is thundershower! Today is cloudy! Today is fine! Today is fine! Today is fine! Today is fine! Today is thundershower!

32、Today is fine! 9.new 修饰符是起什么作用? 答: new 修饰符与 new 操作符是两个概念 new 修饰符用于声明类或类的成员,表示隐藏了基类中同名的成员。而new 操作符用于实例化一个类型 new 修饰符只能用于继承类,一般用于弥补基类设计的缺乏 new 修饰符和 override 修饰符不可同时用在一个成员上,由于这两个修饰符在含义上互相排挤 例如: using System;using System.Collections.Generic;using System.Text;namespace Example09 class BaseClass /基类设计者声明了一

33、个PI的公共变量,方便进展运算 public static double PI = 3.1415; class DervieClass : BaseClass /继承类发觉该变量的值不能满足运算精度,因而能够通过new修饰符显示隐藏基类中的声明 public new static double PI = 3.1415926; class Program static void Main(string args) Console.WriteLine(BaseClass.PI); Console.WriteLine(DervieClass.PI); Console.ReadLine(); 复制代码结果: 3.1415 3.1415926 10.this 关键字的含义? 答: this 是一个保存字,仅限于构造函数和方法成员中使用 在类的构造函数中出现表示对正在构造的对象本身的援用,在类的方法中出现表示对调用该方法的对象的援用,在构造的构造上函数中出现表示对正在构造的构造的援用,在构造的方法中出现表示对调用该方法的结果的援用 this 保存字不能用于静态成员的实现里,由于这时对象或构造并未实例化 在 C# 系统中,this 实际上是一个常量,因而不能使用 this+ 如此的运算 this 保存字一般用于限定同名的隐藏成员、将对象本身做

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com