const 与readonly
    const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。
    常数声明可以声明多个常数,例如:public const double x = 1.0, y = 2.0, z = 3.0;
    不允许在常数声明中使用 static 修饰符。
    常数可以参与常数表达式,例如:public const int c1 = 5.0;public const int c2 = c1 + 100;
    readonly 关键字是可以在字段上使用的修饰符。当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分发生,或者发生在同一类的构造函数中。
    当在声明中初始化变量时,例如: public readonly int y = 5;
    对于实例字段,在包含字段声明的类的实例构造函数中;或者,对于静态字段,在包含字段声明的类的静态构造函数中。只有在这些上下文中时,将 readonly 字段传递为 out 或 ref 参数才有效。
    readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数,如下例所示:public static readonly uint l1 = (uint) DateTime.Now.Ticks;
析构函数
    析构函数用于销毁类的实例。
    不能对结构使用析构函数,只能对类使用析构函数。
    一个类只能有一个析构函数。
    无法继承或重载析构函数。
    无法调用析构函数,它们是被自动调用的。
    析构函数既没有修饰符,也没有参数。
    析构函数隐式地对对象的基类调用 Object.Finalize 方法,进行垃圾回收。
    无法控制何时调用析构函数,因为这由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。它认为这些对象符合销毁条件并回收这些对象占用的内存。程序退出时也会调用析构函数。
    可以通过调用 GC.Collect 方法强制进行垃圾回收,但大多数情况下应避免这样做,因为这样会导致出现性能问题。
    在派生类中,按照从派生相近程度最大的到派生相近程度最小的次序调用,既最底层的派生类的析构函数首先被调用,然后逐个基类的析构函数被调用。
    .NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。
    如果应用程序在使用昂贵的外部资源,可通过实现 Dispose 方法(来自 IDisposable 接口)对象执行必要的清理,在垃圾回收器释放对象前显式地释放资源的方式。即使有这种对资源的显式控制,析构函数也是一种保护措施,可用来在对 Dispose 方法的调用失败时清理资源。
虚拟方法
    若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚拟方法。若其中没有 virtual 修饰符,则称该方法为非虚拟方法。
    几乎所有的基类都包含虚拟方法。如果一个类不包含虚拟方法,则表示它将不作为一个基类使用,但并是不绝对。
    虚拟方法的目的就是让派生类去定制自己的行为。
    非虚拟方法,无论是在声明它的类的实例上调用该方法还是在派生类的实例上调用,实现都是相同的。
    一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法。

转载于:https://www.cnblogs.com/qqflying/archive/2007/10/21/932206.html

const与readonly,析构函数,虚拟方法相关推荐

  1. 如何在 C# 中使用 const,readonly,static

    平时在开发时经常会用到 const,readonly,static 关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以至于在场景中不知道选择哪一个,这篇文章我们就来讨论 C# 中 ...

  2. C#中const和readonly有什么区别?

    C#中const和readonly什么区别? 您什么时候可以使用另一个? #1楼 常量成员是在编译时定义的,不能在运行时更改. 使用const关键字将const声明为字段,并且必须在声明const对其 ...

  3. c#中const与readonly区别

    const表示常量,定义的时候就要初始化:readonly表示只读,定义的时候可以不初始化,可以延迟到构造方法中进行初始化. 以下转载的两篇文章写的很好. 转载 追梦赤子心 的文章:C#基础知识七之c ...

  4. 虚拟方法及抽象方法在使用上的区别

    虚拟方法,由virtual声明,它允许在派生类中重写,也可以不重写.如果在派生类中重写时要声明override.  1   public   class   myclass    2   {    3 ...

  5. C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别

    虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能 ...

  6. const和readonly内部区别

    const和readonly关键字也是面试中经常考到的问题,通常都是用来表示一个不可变的变量成员,那么具体区别是什么?从用法上说,const只能以inline代码的形式定义,而readonly既可以以 ...

  7. const和readonly

    说道定义的变量不容修改的问题,不得不说起C#中还有一个readonly关键字,也是使用在字段上定义不容修改的值,但是const和readonly有几个区别,             区别1)   在语 ...

  8. import android.view.window;,尝试在空对象引用上调用虚拟方法‘android.view.Window$回调...

    尝试在空对象引用上调用虚拟方法'android.view.Window$回调-android.view.Window.getCallback()' 当我SplashActivity打开LoginAct ...

  9. 20100422.C#.const VS readonly

    const和readonly这对"顽固"的兄弟着实会让我这样的菜鸟迷惑. 研究了一番算是有所感悟了. const常量在编译时就会确定值,编译器直接进行值replace,就像是C语言 ...

最新文章

  1. 小程序海外也能做吗?小程序海外主体公司开发的案例
  2. 64位内核开发第五讲,调试与反调试
  3. java跳过_java跳过https证书直接请求工具类
  4. pow(x,y)函数
  5. dba_segments和dba_tables的不同
  6. 三次握手 四次握手 与socket函数的关系
  7. centos7 centos-home 磁盘空间转移至centos-root下(磁盘空间不足,磁盘不足)
  8. python中oserror捕获_Python assert异常处理(一看即懂)
  9. 使用SQL语句创建数据库
  10. linux将字符串改大写,【已解决】makefile中把字符串转换为小写或大写
  11. VBA实现Excel模块筛选高级应用场景!
  12. 腾讯云IM集成问题汇总
  13. 国产系统中标麒麟安装教程
  14. Go Anywhere Chair
  15. 详解1M宽带下载速度?1M等于多少kb?
  16. 泰康人寿付刚:IT规划 SOA是目标
  17. 「学点C语言系列」02 判断年份是否为闰年
  18. 七七四十九劫,九九八十一难
  19. offsetof宏的模拟实现
  20. Android 创建单独的服务运行在后台(无界面)

热门文章

  1. WPF 支持分组互斥的 RadioButton 式单选菜单
  2. AJAX相关JS代码片段和部分浏览器模型
  3. js中变量和jsp中java代码中变量互相访问解决方案
  4. 如何消费WCF Data Services定义的服务操作
  5. 40个迹象表明你还是PHP菜鸟
  6. OpenCvSharp手绘ROI区域+模板匹配+霍夫变换检测圆的边界
  7. 高速信号传输约翰逊 pdf_在PCB板边走高频高速信号线的注意事项
  8. 软件工程大学生职业生涯规划_大学生职业生涯规划的现实意义
  9. html文档表示表格的标记,【单选题】在HTML文档中用于表示表格的标记对是( )...
  10. java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...