• C# 面试题 (三)


    1. 抽象类的特性是什么?

    抽象类不能被实力化,在抽象类上使用new操作符是错误的。

    抽象类允许(但不必要)包含抽象方法和入口。

    抽象类不能用scaled修饰符。

    2. abstract关键字怎么用?

    修饰符abstract是用于类的关键字,以表明这个类本身不能直接有实例或者对象,并且对于其他类来说它只能是一个“基类”。

    3. goto语句怎么用?

    goto语句仍然包含在C#语言中。这个goto可以用来从一个循环内部跳转到外部。但是从循环外部跳入循环内是不允许的。

    4. 控制台应用程序和窗口应用程序有什么区别?

    控制台应用程序,设计用来在没有用户界面的命令行中运行。
    窗口应用程序,设计用来通过用户界面在用户桌面执行。

    5. return语句怎么用?

    return语句与程序 (方法或者函数)相关。在执行return语句的时候,系统将控制权从被调用程序交给调用程序。return语句用于两种目的:

    立即返回当前执行的代码的调用者

    返回给当前执行的代码的调用者一些值。

    6. Array和LinkedList之间的区别是什么?

    数组是不关心彼此元素位置的简单数字序列。他们之间的位置彼此独立。增加,删除或者修改任何数组元素都是非常容易的。相对于数组,链表是一个复杂的数字序列。

    7. C#有throws子句吗?

    不,不像Java,C#不需要开发者指定方法可以抛出的异常。

    8. C#支持可变数目的参数吗?

    是的,使用params关键字。该参数指定为特定类型的参数列表。

    9. 可以重写私有虚方法吗?

    不可以,私有方法不能在类外访问。

    10. 什么是多播委托?

    每个委托对象保持对一个单独方法的引用。但是,一个委托对象保持对多个方法的引用并调用它们是可能的。这样的委托对象成为多播委托或者组合委托。

    11. 什么是C#独有的特性?

    XML文档.

    12. 在C#中使用异常是推荐的吗?

    是的,在.NET框架中异常是推荐的错误处理机制。

    13. 在switch语句中break语句是做什么的?

    break语句终结它所在的循环。它也改变了程序执行的流程。

    在switch语句中,break语句用在一个case语句的结尾处。在C#中break语句是强制性的,避免了一个case语句流向另一个case语句。

    14. 什么是智能导航?

    因为服务端验证和页面被刷新导致页面刷新时,光标位置保持不变。

    15. CONST和READONLY的区别是什么?

    都是为了定义常量值。const字段只能在声明这个域的时候初始化。readonly字段可以在声明时或者构造函数中定义。

    16. C#有throws子句吗?

    不,不像Java,C#不需要(甚至不允许)开发者指定方法可以抛出的异常。

    17. 方法可以重载的不同方式是什么?

    不同的参数类型,不同的参数个数,不同的参数顺序。

    18. 事件有返回值吗?

    没有,事件没有返回类型。

    19. 事件是什么?

    事件是一个基于另一个程序方法执行的动作。

    事件是被对象或者类使用来通知其他对象发生的事件的委托类型类成员。

    事件可以通过event关键字来声明。

    20. 什么是标识符?

    标识符无他,它是用来在程序中唯一识别各种实体的名称。

    21. C#中有哪些不同的文本类型?

    布尔值: True和False是Boolean类型,分别映射到真和假的状态。

    整数:用于编写类型Int,uInt,long和ulong的值。

    实数:用于编写类型float, double和decimal的值。

    字符:代表单字符,通常由有引号的字符组成,如‘a’。

    字符串: C#支持两种类型的字符串,规则字符串和原义字符串。规则字符串由0个或多个括在双引号中的字符组成,如“116110″。原义字符串由@字符后跟带双引号的字符组成,如@”hello”。

    Null: 代表null类型。

    22. 什么是数据封装?

    数据封装,也被称为数据隐藏,它是类的实现细节对保持对用户隐匿的机制。用户只能通过执行称为方法的特殊函数来对隐藏了成员的类执行一组有限的操作。

    23. 可以重写私有虚方法吗?

    不可以,私有方法不能在类外访问。

    24. 子程序和函数的主要区别是什么?

    子程序没有返回值,而函数有。

    25. C#和C++的区别是什么?

    C#不支持#include语句。它只用using语句。

    C#中,类定义在最后不使用分号。

    C#不支持多重继承。

    数据类型的显示转换在C#中比C++中安全很多。

    C#中switch也可用于字符串值。

    命令行参数数组的行为在C#中和C++中不一样。

    26. 什么是嵌套类?

    嵌套类是类中的类。

    嵌套类是声明发生在另一个类或者接口里面的任何类。

    27. 可以给静态构造函数参数吗?

    不可以,静态构造函数不可以有参数。

    28. C#中,字符串是值类型还是引用类型?

    字符串是对象(引用类型)。

    29. C#提供拷贝构造函数吗?

    不,C#不提供拷贝构造函数。

    30. 类或者结构可以有多个构造函数吗?

    可以,类或者结构可以有多个构造函数。C#中构造函数可以被重载。

    31. 可以创建接口的实例吗?

    不可以,你不可以创建接口的实例。

    32. 接口可以包含字段吗?

    不可以,接口不能包含字段。

    33. 类可以有静态构造函数吗?

    是的,类可以有静态构造函数。静态构造函数在任何静态字段被访问之前被立即自动调用,并且通常用来初始化静态类成员。它在第一个实例被创建或者任何静态成员被引用之前自动调用。静态构造函数在实例构造函数之前调用。一个例子如下所示。

    34. C#中委托的主要作用是什么?

    委托主要用于定义回调方法。

    35. 投影(Shadowing)和重写(overriding)的区别是什么?

    重写仅仅重定义实现而投影重定义整个元素。

    重写派生类可以通过“ME”关键字引用父类元素,但投影中你可以通过”MYBASE”访问父类元素。

    36. 事件可以用访问修饰符吗?

    可以,你可以在事件中用访问修饰符。你可以对事件使用portected关键字,这样只允许继承类访问。你可以使用private修饰事件,仅可以供当前类对象访问。

    37. 为什么在代码中用virtual关键字?

    代码中Virtual关键字是用来定义可以在派生类中重写的方法和属性的。

    38. 什么是构造函数和析构函数?

    构造函数和析构函数是特殊的方法。

    构造函数和析构函数是每个类的特殊方法。

    每个类都有自己的构造函数和析构函数,并且在类实例被创建或者销毁时自动调用。

    每当你访问类的时候,构造函数就初始化所有类成员。当对象不想再需要的时候,析构函数就销毁它们。

    39. 我们怎么抑制finalize方法?

    GC.SuppressFinalize()。

    40. C#支持可变数目的参数吗?

    是的,使用params关键字。

    该参数指定为特定类型的参数列表,例如,int。为了最大的灵活性,类型可以是object。

    使用这种方法的标准例子是System.console.writeLine()。

    41. 哪个方法用来启动一个线程?
    Start。

    42. 什么是泛型?

    泛型帮助我们创建灵活的强类型集合。

    泛型基本上从数据类型中分离了逻辑,以保持更好的可重用性,更好的可维护性等等。

    43. 编译时多态性和运行时多态性的区别是什么?

    编译时多态性

    编译时多态性也被称为方法重载。

    方法重载是指有两个或更多同名但含有不同签名的方法。

    运行时多态性

    运行时多态性也被称为方法重写。

    方法重写是指有两个或更多的同名方法,含有相同的方法签名但对应不同的实现。

    44. 哪一个命名空间使XML中多线程编程可行?

    System.Threading。

    45. 在C#中可以声明一个静态块吗?

    不可以,因为C#不支持静态块,但它支持静态方法。

    46. 方法可以声明为密封(sealed)吗?

    在C#中方法不可以声明为sealed。但当我们在派生类重写一个方法的时候,我们可以将重写的方法定义为sealed。通过其sealed,我们就可以避免对该方法的进一步重写。

    47. 在C#中用什么命令来实现属性?

    C#中用get和set修饰符来实现属性。

    48. 什么是静态成员?

    定义为静态的成员,可以从类级别上直接调用,而不是从类实例上调用。

    49. C#中继承一个类的语法是什么?

    当一个类从另一个类派生时,基类的成员就变为派生的成员。

    在访问基类的成员所使用的访问修饰符指定了派生类中的基类成员的访问状态。

    C#中从另一个类继承类的语法如下:

    class MyNewClass : MyBaseClass

    50. C#中while循环和do while循环的基本区别是什么?

    while循环在一开始测试它的条件,这意味着如果条件求值为真,封闭的语句块执行0或者更多次。do while循环至少遍历一次语句块然后在最后才检查条件。

    51. 子程序和函数的主要区别是什么?

    子程序没有返回值,而函数有。

    52. C#中什么是密封类?

    sealed修饰符用来阻止从一个类派生。如果一个密封类被指定为另一个类的基类时会发生编译时错误。

    53.类和接口的区别是什么?

    抽象类可以实现它的一些成员,但接口不能实现它的任何成员。

    接口不能有字段,而抽象类可以有字段。

    接口仅可以从另一个接口继承并且不能继承抽象类,而抽象类可以继承另一个抽象类或另一个接口。

    类可以同时继承多个接口,而类不能同时继承多个类。

    抽象类的成员可以定义访问修饰符而接口成员不能定义访问修饰符。

    54. 抽象方法和虚方法之间的区别是什么?

    抽象方法不提供实现,并且强制派生类重写该方法(除非派生类也是个抽象类),而虚方法可以有实现并且在派生类中重写与否是可选的。因此虚方法可以实现并提供了派生类重写的选择。抽象方法不能提供实现并且强制派生类重写该方法。

    55. 什么是静态方法?

    只要方法不试图访问任何实例数据或者其他实例方法,那么声明它为静态的是可能的。

    56. 什么是New修饰符?

    new修饰符隐藏了基类的成员。C#仅仅支持签名的隐藏。

    57. C#中get和set属性的优势是什么?

    get属性访问器用于返回属性值。

    set属性访问器用来设置新的值。

    58. const和readonly之间有什么区别?

    const声明的字段不能使用static修饰符,而readonly可以使用static修饰符。

    const字段只能在声明时初始化,而readonly可以在声明时或在构造函数中初始化。

    const字段的值在设计时就计算出来了,而readonly的值在运行时计算。

    59. Is C# object oriented?C#是面向对象的吗?

    是的,C#和传统的Java及C++一样是面向对象的语言。

    60. 有哪些不同种类的多态性?

    有两种类型的多态,它们是:

    编译时多态性

    运行时多态性

    61.什么是.Net FrameWork ?

    定义:.Net FrameWork类似于JVM(虚拟机),他是微软Web Services的引擎。我们习惯的叫做.NET框架,同时我们写的C#,VB.NET,等程序必须在.Net框架上运行。
    组成:.Net FrameWork由两部分组成,分别是公共语言运行时(CLR),统一类库集(FCL)。
    公共语言运行时(CLR):包括两部分分别为,公共语言规范(CLS)及公共类型规范(CTS)。
    统一类库集(FCL):涵盖了我们以后开发中要用到的基本框架类,ADO.NET,WINFORM,WEBFORM,WEBSERVICES等类库集。

  • 相关阅读:
    c#之字段,属性,索引器,常量
    c#类,对象,类成员简介
    c#之接口,依赖反转,单元测试
    c#之 抽象类与开闭原则
    c#重写与多态
    c#之类
    c#之类的继承,类成员的访问控制
    c#之委托
    c# try catch用法思路
    js的全局变量
  • 原文地址:https://www.cnblogs.com/yuan-jun/p/6729832.html
Copyright © 2020-2023  润新知