`

CLR笔记(二)

阅读更多

 

6.型和成

1.Class的可性有publicinternalpublic所有程序集都可internal仅对其所在的程序集可。默public的。

  2.友元程序集,

  使用friend assembly可以实现单测试,而不使用反射技

  的是按照命令行编译

  我测试用的是vs2005solution,如下:

  3.的可访问

  成private的,接口型的成都是public的。

  子重写父的成员时,原始成与重写成要有相同的可访问——C#束;CLR束是,重写成的可访问性不能更低。

  CLRC#是不一的,如表:

CLR术语 C#术语
Private private
Family protected
Family and Assembly
不支持
Assembly internal
Family
 or Assembly protected internal
Public public


  4.态类

  static只能用于class,不能用于struct,因CLR要求须实例化,而且不能控制例化程。

  C#态类束:

  静态类直接从System.Object派生

  静态类不能实现任何接口

  静态类只能定:字段,方法,属性,事件

  静态类不能用作:字段,方法,参数,局部量。

  在MSIL中,不会态类生成ctor,会将其标记为abstractsealed

  5.部分

   CLR不支持partial,只是C#法。所以某个型的源使用同一种编

  6.件,多和版本控制

  .NET版本号2.7.1.34,包含4个部分:主版本号,次版本号,内部版本号,修版本号。

   修版本,向后兼容,改内部/版本号;

   布新版本,不向后兼容,改/次版本号。

  多中,子重写父的虚方法,会引起版本控制问题,即父类发生改,其版本低于子版本,会致子为变化。

  C# 5个用于 / 的 影响件版本控制 的 关键字:

   abstract:用于/

   virtualoverride:用于成

   sealed:用于/。用于成员时用于重写了虚方法的方法。

   new,用于//常量/字段

  C#用虚方法:

   CLR许类中定多个"同名方法"仅仅是返回型不同,IL许这样做;C#不允,忽略返回型,相的用"转换操作符"实现IL中的"同名方法"

   用方法相MSIL

   一个是call,用来用静方法,例方法和虚方法。必要指定用方法的(于静方法)或者(例方法/虚方法),如果在该类/象中找不到方法,会检查其基来匹配方法。

   另一个是callvirt,用来例方法和虚方法,不能用于用静方法。必要指定用方法的象,如果null,会抛出NullReferenceException异常,意味着用前都会有外的null检查,从而比call慢一些。

   如下代所示:

    public sealed class Program
    {
        public Int32 GetFive()
        {
            return 5;
        }

        public static void Main()
        {
            Program p = null;
            Int32 x = p.GetFive();  //C#,使用callvirt,会抛出NullReferenceException异常
        }
    }

   C#编译器中,使用callvirt用所有例方法(包括虚方法),使用call用所有静方法。于其他的编译器,一点不能保,所以在虚方法和非虚方法之而不重新编译,会生无法预测问题

   C#使用call而不用callvirt用虚方法的特例:ToString下:

    internal class SomeClass
    {
        public override string ToString()
        {
            return base.ToString();
        }
    }

   这时候,生成callIL。因如果使用callvirt,意味着这时一个虚方法,从而递归执方法,直到AppDomain的堆溢出。

   在值类型定的方法,使用call是因,首先,值类型是密封的,从而不存在虚方法;另外,值类型永不会null,所以永不会抛出NullReferenceException异常;再者,如果使用callvirt,就要使用装箱机制,性能会有极大影响。

   在设计class程中,要尽量少定虚方法。取代法:可以定方法,其中最复杂的方法虚化,而将所有有用的重非虚化,示例如下:

    public class Set
    {
        private Int32 m_length = 0;

        //个有用的重是非虚
        public Int32 Find(Object value)
        {
            return Find(value, 0, m_length);
        }

        //个有用的重是非虚
        public Int32 Find(Object value, Int32 startIndex)
        {
            return Find(value, 0, m_length - startIndex);
        }

        //功能最丰富的方法是虚,可以被重写
        public Int32 Find(Object value, Int32 startIndex, Int32 endIndex)
        {
            .//具体
实现
        }
    }

   sealed闭类尽量使用。将sealed非密的容易,反之困;性能也快,因sealed一定是非虚的,从而编译器不用考font-size: 10pt; color: red; font-family:

分享到:
评论

相关推荐

    CLR Via C# 读书笔记

    这是国外一位程序员写的CLR Via C#读书笔记,写得挺好,拿出来跟大家分享

    CLR笔记(一)

    NULL 博文链接:https://teddywang.iteye.com/blog/794260

    重温C# clr 笔记总结

    本篇文章是对以前学习C# clr做的一些笔记,现在拿出来和大家分享下,希望需要的朋友能参考一下

    NICK笔记.CLR

    Nick 的学习CLR的总结, 其中使用大量图片说明CLR内部实现机制.

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    麻省理工学院算法导论中英文版习题笔记全\solution to CLR(算法导论习题答案).pdf

    麻省理工学院算法导论中英文版习题笔记全\solution to CLR(算法导论习题答案).pdf

    带着问题读CLR via C#(笔记一)CLR的执行模型

    Q1: 什么是CLR? A1: CLR (Common Language Runtime) 是一个可以由多种编程语言使用的“运行时”。 Q2: CLR的核心功能有哪些? A2: 1)内存管理;2)程序集加载;3)安全性;4)异常处理;5)线程同步 Q3: CLR与使用...

    带着问题读CLR via C#(笔记二)类型基础

    A2: 1)计算对象所需字节数,包括该类型及其基类型定义的所有实例字段所需的字节数和类型对象指针、同步块索引所需字节数,类型指针和同步块索引是CLR用来管理对象的;2)在托管堆上分配该对象所需内存空间;3)初始...

    联想昭阳K46序列笔记本添加SLIC 2.1的Marker工具

    请在纯DOS分别执行 CLR.BAT 和 FLASH.BAT,出现active……即成功。 注: 此SLIC 2.1的ID为"CB-01", 是官方原生版本. 此工具适合联想昭阳K46全系列笔记本(如果是SLIC 2.1,则不必Marker),以及同一代工厂出的其它序号...

    net学习笔记及其他代码应用

    而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行...

    C#OOP笔记大全

    1.深入.NET框架 ... CLR : Common Language Runtime 公共语言运行时 1.CTS Common Type System 通用类型系统 2.CLS Common Language Specification 公共语言规范 FCL : Framework Class Libary 框架类库

    c#手写笔记文档 适用于c#实战开发

    C# 程序在 .NET 上运行,而 .NET 是名为公共语言运行时 (CLR) 的虚执行系统和一组类库。 CLR 是 Microsoft 对公共语言基础结构 (CLI) 国际标准的实现。 CLI 是创建执行和开发环境的基础,语言和库可以在其中无缝地...

    c#笔记总结

    C#从入门到精通学习笔记.1.C#语言特性: 不可以直接操作内存,去掉了指针操作。用CLR中的GC来管理 面向对象:封装、继承、多态 支持HTML,XML,SOAP等 2.C#与.net框架的关系: C#只是.net框架所支持的一种语言。C#...

    联想笔记本 Lenovo E46 Marker_TOOL slic 2.1开通

    联想E46 Marker TOOL 工具 dos下运行 先运行clr.bat 再运行flash.bat

    ASP.NET预备知识学习笔记

     公共语言运行时(Common Language Runtime)(CLR): 提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的安全类型,提高代码的安全性和可靠想。 .NET Framework类库: 与CLR紧密集成,可以使用它...

    联想Marker.rar

    联想笔记本 Lenovo E46 Marker 把E46marker文件夹里的所有文件拷入dos启动盘内(我用u盘做的)。网上介绍的方法多是先运行CLR.bat清除原有的SLIC文件

    OffensiveDLR:工具箱,其中包含研究笔记和PoC代码,用于武器化.NET的DLR

    包含研究笔记和PoC代码的工具箱,用于武器化.NET的DLR 内容 脚本 描述 Kukulkan 精简版的 ,C#DLL和EXE嵌入了IPY引擎。 通讯已加密,可与CobaltStrike一起使用 Invoke-JumpScare.ps1 使用嵌入式Boolang编译器...

Global site tag (gtag.js) - Google Analytics