• .NET 深入研究 接口与值类型


    http://www.cnblogs.com/Ninputer/archive/2008/11/22/generic_covariant.html

    本文将不会阐述基本概念,请参考其它相关资料。

    1、 Interface的功能如此强大,如此的富有意义,值类型当然不会拒绝它。一个值类型可以实现一个或者多个接口。值类型有2种表现形式:未装箱(unboxed)和已装箱(boxed)

     

    2、虽然未装箱的值类型没有类型对象指针,但仍然可以调用由类型继承或者重写的虚方法(如:Equals,GetHashCode,ToString).如果你的值类型重写了其中任意一个虚方法,那么CLR可以非虚地调用该方法。因为值类型是密封的,没有任何类型能够从它们派生。此外,用于调用虚方法的值类型示例也不会被装箱。然而,如果你重写的虚方法要调用的方法在基类中实现,那么在调用基类的实现时,值类型实例就会装箱,以便通过this指针将一个堆对象的引用传给基方法。

     

    3、调用一个非虚,继承的方法时候(),无论如何都要对值类型进行装箱操作。这是因为这些方法是有System.Object定义的,所以这些方法期望this指针实参是指向堆上的一个对象的指针。

     

    4、将值类型的一个未装箱的实例转型为类型的某个接口,要求对实例进行装箱。这是因为接口变量必须包含对堆上的一个对象的引用。接口变量指向堆上的一个对象的引用,以使在CLR能检查对象的类型对象指针判断对象的确切类型。

     

    5、值类型是不可变的、使用接口更改已装箱值类型中的字段

        第一次看到这样的语句,我不知道到底这是什么意思。

     

    PS:

    学习东西最可怕的不是你记住的知识少,而是你记住的都是错误的!切身体会......

    通常为了调用一个虚方法,CLR 需要判断对象的类型,以定位类型的方法表。

    学习技术不只是为养家糊口,也为夜深人静的时候能够一个人静静享受这其中的乐趣。
  • 相关阅读:
    Sitecore安全:访问权限
    Sitecore 8.2 防火墙规则的权威指南
    Sitecore 8.2 安全性第2部分:安全性编辑器和Access Viewer
    Sitecore安全性第1部分:自定义角色和权限
    Sitecore 8.2 Admin用户帐户解锁
    Sitecore 8.2 数据库权限设置
    cesium 结合 geoserver 实现地图属性查询(附源码下载)
    Vue&Cesium&Ribbon界面: 将桌面GIS搬进浏览器
    leaflet图斑历史时空播放(附源码下载)
    openlayers6结合geoserver实现地图属性查询(附源码下载)
  • 原文地址:https://www.cnblogs.com/renxs/p/2649425.html
Copyright © 2020-2023  润新知