zoukankan      html  css  js  c++  java
  • 面试题整理:C#(二)

    1.类,接口的区别

    从定义的角度
    类描述一个实体,包括状态、属性和动作
    接口定义一类动作,没有实现,也没有状态信息
    从程序的角度
    接口是函数声明;类是函数实现
    接口可以有属性,不能有字段
    一个子类只能继承一个父类,但是可以继承多个接口

    2.接口和抽象类的区别

    抽象类是一类事物的高度聚合,接口是定义行为的规范
    抽象类定义方法时,可以有实现,也可以没有
    接口中定义的方法,不能有实现
    抽象类子类可以不重写抽象方法,继承接口的类必须有方法和属性的实现

    3.抽象方法和虚方法的区别

    抽象方法使用abstract关键字,虚方法是用virtual关键字
    抽象方法必须被派生类重写,虚方法可以不重写
    抽象方法可以看作没有实现的虚方法
    类包含抽象方法,必须被定义为抽象类

    4.Equal()、ReferenceEqual()、== 的区别

    对于引用类型
    Equal是比较引用的值是否相等
    ReferenceEqual比较是否是同一个引用

    Object a=new Object();
    Object b=a;
    Object c=new Object();       
    Object d=new Object();
    c=(object)100;
    d=(object)100;

    System.Object.Equals(a, b);           //return true
    System.Object.ReferenceEquals(a, b);    //return true
    System.Object.Equals(c, d);           //return true
    System.Object.ReferenceEquals(c, d);    //return false

    对于值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。

    5.进程和线程的区别

    线程时CPU调度和分配的单位,进程内可以有多个线程,共享进程资源

    6.使用Operator的注意事项

    需要提供public static修饰符;
    需要有返回值;参数类型可以不同;==和!=必须成对出现

    7.Task和ThreadPool的区别

    ThreadPool不支持线程的取消,完成、失败通知等交互
    ThreadPool不支持线程执行的顺序
    Task有属性,可以查询任务完成时的状态(IsCanceledIsCompletedIsFaulted)
    Task没有提供回调时间通知,通过启动一个新任务的方式完成类似的功能。
    ContinueWith可以在一个Task完成时发起一个新的任务,支持了任务的完成通知,可以在新任务中获取旧任务的结果
    ThreadPool可以节省创建销毁线程消耗的时间,减少内存浪费,和性能损失

    8.Sealed关键字的作用

    被Sealed类修饰的类和方法不能被继承和重写

    9.能用foreach遍历访问的对象需要实现什么接口或者声明什么方法

    不一定要实现IEnumerable接口,一定要实现GetEnumerator方法

    10.构造函数是否可以被Override

    不可以,构造器不能被继承,不能被Override,可以被Overload

    TO BE CONTINUE...

  • 相关阅读:
    Lambda表达式
    java中解决小数精度问题
    [Unity]-黑魂复刻-动画 001
    kuka Virtual Remote pendant 连接使用
    C# 操作 pg 数据库
    C#常用字符串操作
    Go学习笔记之相关资源
    Go学习笔记之常用命令
    Go学习笔记之安装
    nginx学习笔记之安装
  • 原文地址:https://www.cnblogs.com/alex09/p/4605361.html
Copyright © 2011-2022 走看看