`

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笔记(一)

    【标题】"CLR笔记(一)"揭示了对.NET框架中的Common Language Runtime(CLR)的初步探索。这篇笔记可能涵盖了CLR的基础概念、工作原理以及在实际编程中的应用。 【描述】虽然描述部分为空,但根据标题我们可以推测这...

    NICK笔记.CLR

    ### NICK笔记.CLR 关键知识点解析 #### 一、应用程序域(AppDomain) **定义**: - 应用程序域(AppDomain)可以被视为一种轻量级的进程(逻辑进程),它是在一个物理进程中的隔离环境。 **特点**: 1. **多AppDomain...

    重温C# clr 笔记总结

    C# CLR,全称Common Language Runtime,是.NET Framework的核心组件,负责执行代码并提供许多基础服务,如类型安全、垃圾回收、异常处理等。本文主要总结了关于C# CLR的一些关键知识点。 首先,.NET Framework由两...

    c#学习笔记.txt

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

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

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

    计算机书籍读书笔记参考.docx

    "计算机书籍读书笔记参考.docx" 本文档主要围绕 ASP.NET 和数据仓库两个主题展开,详细介绍了 ASP.NET 的工作方式、事件驱动模型、CLR(Common Language Runtime)运行阶段通用语言,以及数据仓库的概念、特点、...

    C#学习阅读笔记

    二、.NET Framework 概述 * .NET Framework 是一个 runtime 环境,提供了公共语言运行库(CLR)和 Framework 类库。 * CLR 是 .NET Framework 的核心,负责执行托管代码。 * .NET Framework 提供了许多优点,例如...

    CLR via Csharp 3rd

    8. **jb51.net.txt**:此文本文件可能包含了一些笔记、链接或其他与学习过程相关的资料,具体内容需打开查看。 通过阅读《CLR via C# 3rd》,开发者不仅可以深入了解.NET Framework的内部运作,还能提升编写高效、...

    Learning hard C# 学习笔记

    最后,学习C#不仅仅是掌握语法,还包括理解.NET框架和CLR(Common Language Runtime)的工作原理,以及如何利用Visual Studio这样的IDE进行高效开发。了解这些背景知识,将有助于开发者更好地利用C#的全部功能。 ...

    C#学习资料和笔记收录工具

    3. mscoree.dll:这是.NET Framework的公共语言运行时(CLR),负责执行托管代码。 4. rsdeploy.dll:可能是一个与部署相关的组件,可能用于安装或更新应用程序。 5. learning.exe:这应该是主程序文件,即C#学习...

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

    从给定的文件信息来看,这是一份关于《算法导论》(第二版)的习题解答笔记,由Philip Bille编写,旨在为Cormen、Leiserson和Rivest所著的经典教材中的练习题提供解答建议。下面将根据这份文件的信息,详细解析其中...

    CLR via C# 3rd.Edition(英文版)

    《CLR via C# 3rd Edition》是C#编程领域的一部经典著作,由著名技术专家Jeffrey Richter撰写。这本书深入浅出地探讨了.NET ...书中提供的下载地址指向的文本文件可能是书籍的摘录或笔记,可以作为学习的辅助资料。

    达内微软NET学习笔记

    2. **.NET框架结构**:包括CLR(Common Language Runtime)和CLS(Common Language Specification),解释它们在.NET中的角色,如何管理内存、异常处理和类型安全。 3. **ASP.NET Web开发**:深入探讨ASP.NET框架,...

    HY11P35学习笔记

    HY11P35学习笔记 HY11P35是一款微控制器芯片,广泛应用于工业自动化、消费电子、汽车电子等领域。今天,我们将通过对HY11P35学习笔记的分析,了解这款芯片的程序架构、系统初始化设置、interrupt处理程序等知识点。...

    深入.NET平台和C#编程笔记

    深入.NET平台和C#编程的学习笔记,主要涵盖了.NET框架的基础知识和C#编程的核心概念。首先,.NET框架由两大部分组成:公共语言运行时(CLR)和框架类库。CLR是所有.NET应用程序运行的基础,它如同一个虚拟机,提供了...

Global site tag (gtag.js) - Google Analytics