欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C程序员面试必答.doc

    • 资源ID:860521       资源大小:159.50KB        全文页数:28页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C程序员面试必答.doc

    C# 程序员面试必答1.静态变量和非静态变量的区别? 答: 静态变量: 静态变量使用 static 修饰符进行声明 在所属类被装载时创建 通过类进行访问 所属类的所有实例的同一静态变量都是同一个值 非静态变量: 不带有 static 修饰符声明的变量称做非静态变量 在类被实例化时创建 通 过对象进行访问 同一个类的不同实例的同一非静态变量可以是不同的值 示例:using System; using System.Collections.Generic; using System.Text; namespace Example01 class Programclass Class1public static String staticStr = quot;Classquot;public String notstaticStr = quot;Objquot;static void Main(string args)/静态变量通过类进行访问,该类所有实例的同一静态变量都是同一个值Console.WriteLine(quot;Class1's staticStr: 0quot;, Class1.staticStr);Class1 tmpObj1 = new Class1();tmpObj1.notstaticStr = quot;tmpObj1quot;Class1 tmpObj2 = new Class1();tmpObj2.notstaticStr = quot;tmpObj2quot;/非静态变量通过对象进行访问,不同对象的同一非静态变量可以有不同的 值Console.WriteLine(quot;tmpObj1's notstaticStr: 0quot;, tmpObj1.notstaticStr);Console.WriteLine(quot;tmpObj2's notstaticStr: 0quot;, tmpObj2.notstaticStr);Console.ReadLine(); 复制代码 结果: Class1's staticStr: Class tmpObj1's notstaticStr: tmpObj1 tmpObj2's notstaticStr: tmpObj2 2.const 和 static readonly 区别? 答: const 用 const 修饰符声明的成员叫常量,是在编 译期初始化并嵌入到客户端程序 static readonly 用 static readonly 修饰符声明的成员依然 是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但 与常量不同的是这种变量是在运行期初始化 示例: 测试类:using System; using System.Collections.Generic; using System.Text; namespace Example02Lib public class Class1public 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;StaticReadonly Changedquot;/5-1-a-s-p-x 复制代码 客户端代码:using System; using System.Collections.Generic; using System.Text; using Example02Lib; namespace Example02 class Programstatic void Main(string args)/修改 Example02 中 Class1 的 strConst 初始值后,只编译 Example02Lib 项目/然后到资源管理器里把新编译的 Example02Lib.dll 拷贝 Example02.exe 所在 的目录,执行 Example02.exe/切不可在 IDE 里直接调试运行因为这会重新编译整个解决方案!/可以看到 strConst 的输出没有改变,而 strStaticReadonly 的输出已经改变/表明 Const 变量是在编译期初始化并嵌入到客户端程序,而 StaticReadonly 是在运行时初始化的Console.WriteLine(quot;strConst : 0quot;, Class1.strConst);Console.WriteLine(quot;strStaticReadonly : 0quot;, Class1.strStaticReadonly);Console.ReadLine(); 复制代码 结果: 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;StaticReadonlyquot;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 ) 。注意,和 DllImport 一起使用时要加上 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 命名 空间中定义/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, myString, quot;My Message Boxquot;, 0); 复制代码 结果: 4.abstract 是什么意思? 答: abstract 修饰符可以用于类、方法、属性、事件和索 引指示器(indexer) ,表示其为抽象成员 abstract 不可以和 static 、virtual 、override 一 起使用 声明为 abstract 成员可以不包括实现代码,但只有类中还有未实现的抽象成员, 该类就不可以被实例化,通常用于强制继承类必须实现某一成员 示例:using System; using System.Collections.Generic; using System.Text; namespace Example04 #region 基类,抽象类public abstract class BaseClass/抽象属性,同时具有 get 和 set 访问器表示继承类必须将该属性实现为可读写public abstract String Attributeget;set;/抽象方法,传入一个字符串参数无返回值public abstract void Function(String value);/抽象事件,类型为系统预定义的代理(delegate):EventHandlerpublic abstract event EventHandler Event;/抽象索引指示器,只具有 get 访问器表示继承类必须将该索引指示器实现为只读public abstract Char thisint Indexget;#endregion#region 继承类public class DeriveClass : BaseClassprivate String attribute;public override String Attributegetreturn attribute;setattribute = value;public override void Function(String value)attribute = value;if (Event != null)Event(this, new EventArgs();public override event EventHandler Event;public override Char thisint Indexgetreturn attributeIndex;#endregionclass Programstatic void OnFunction(object sender, EventArgs e)for (int i = 0; i B 必须进行强制类型转换(B = (B)A) implicit 表示隐 式转换,如从 B -> A 只需直接赋值(A = B) 隐式转换可以让我们的代码看上去更漂亮、 更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些 信息(如精度) ,那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端 示例:using System; using System.Collections.Generic; using System.Text; namespace Example23 class Program/本例灵感来源于大话西游经典台词“神仙?妖怪?”-主要是我实在想不出什么 好例子了class Immortalpublic string name;public Immortal(string Name)name = Name;public static implicit operator Monster(Immortal value)return new Monster(value.name + quot;:神仙变妖怪?偷偷下凡即 可。 。 。quot;);class Monsterpublic string name;public Monster(string Name)name = Name;public static explicit operator Immortal(Monster value)return new Immortal(value.name + quot;:妖怪想当神仙?再去修炼 五百年!quot;);static void Main(string args)Immortal tmpImmortal = new Immortal(quot;紫霞仙子quot;);/隐式转换Monster tmpObj1 = tmpImmortal;Console.WriteLine(tmpObj1.name);Monster tmpMonster = new Monster(quot;孙悟空quot;);/显式转换Immortal tmpObj2 = (Immortal)tmpMonster;Console.WriteLine(tmpObj2.name);Console.ReadLine(); 复制代码 结果: 紫霞仙子:神仙变妖怪?偷偷下凡即可。 。 。 孙悟空:妖怪想当神仙?再去修炼五 百年! 24.params 有什么用? 答: params 关键字在方法成员的参数列表中使用,为该方 法提供了参数个数可变的能力 它在只能出现一次并且不能在其后再有参数定义,之前可以 示例:using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 class App/第一个参数必须是整型,但后面的参数个数是可变的。/而且由于定的是 object 数组,所有的数据类型都可以做为参数传入public static void UseParams(int id, params object list)Console.WriteLine(id);for (int i = 0; i < list.Length; i+)Console.WriteLine(listi);static void Main()/可变参数部分传入了三个参数,都是字符串类型UseParams(1, quot;aquot;, quot;bquot;, quot;cquot;);/可变参数部分传入了四个参数,分别为字符串、整数、浮点数和双精度浮 点数数组UseParams(2, quot;dquot;, 100, 33.33, new double 1.1, 2.2 );Console.ReadLine(); 复制代码 结果: 1 a b c 2 d 100 33.33 System.Double 25.什么是反射? 答: 反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件 通过对类型动态实例化后,还可以对其执行操作 一般用于插件式框架程序和设计模式的实 现,当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情(前面好象见过一 位高人用反射调用一个官方类库中未说明的函数。 。 。 ) 示例:using System; using System.Collections.Generic; using System.Text; namespace Example25Lib public class Class1private string name;private int age;/如果显式的声明了无参数构造函数,客户端只需要用程序集的 CreateInstance 即 可实例化该类/在此特意不实现,以便在客户调用端体现构造函数的反射实现/public Class1()/public Class1(string Name, int Age)name = Name;age = Age;public void ChangeName(string NewName)name = NewName;public void ChangeAge(int NewAge)age = NewAge;public override string ToString()return string.Format(quot;Name: 0, Age: 1quot;, name, age); 复制代码 反射实例化对象并调用其方法,属性和事件的反射调用略去using System; using System.Collections.Generic;using System.Text; /注意添加该反射的命名空间 using System.Reflection; namespace Example25 class Programstatic void Main(string args)/加载程序集Assembly tmpAss = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + quot;Example25Lib.dllquot;);/遍历程序集内所有的类型,并实例化Type tmpTypes = tmpAss.GetTypes();foreach (Type tmpType in tmpTypes)/获取第一个类型的构造函数信息ConstructorInfo tmpConsInfos = tmpType.GetConstructors();foreach (ConstructorInfo tmpConsInfo in tmpConsInfos)/为构造函数生成调用的参数集合ParameterInfo tmpParamInfos = tmpConsInfo.GetParameters(); object tmpParams = new objecttmpParamInfos.Length;for (int i = 0; i < tmpParamInfos.Length; i+)tmpParamsi = tmpAss.CreateInstance(tmpParamInfosi.ParameterType.FullName);if (tmpParamInfosi.ParameterType.FullName = quot;System.Stringquot;)tmpParamsi = quot;Clarkquot;/实例化对象object tmpObj = tmpConsInfo.Invoke(tmpParams);Console.WriteLine(tmpObj);/获取所有方法并执行foreach (MethodInfo tmpMethod in tmpType.GetMethods()/为方法的调用创建参数集合tmpParamInfos = tmpMethod.GetParameters();tmpParams = new objecttmpParamInfos.Length;for (int i = 0; i < tmpParamInfos.Length; i+)tmpParamsi = tmpAss.CreateInstance(tmpParamInfosi.ParameterType.FullName);if (tmpParamInfosi.ParameterType.FullName = quot;System.Stringquot;)tmpParamsi = quot;Clark Zhengquot;if (tmpParamInfosi.ParameterType.FullName = quot;System.Int32quot;)tmpParamsi = 27;tmpMethod.Invoke(tmpObj, tmpParams);/调用完方法后再次打印对象,比较结果Console.WriteLine(tmpObj);Console.ReadLine(); 复制代码

    注意事项

    本文(C程序员面试必答.doc)为本站会员(帮****)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档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  

    收起
    展开