zoukankan      html  css  js  c++  java
  • .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 需要判断对象的类型,以定位类型的方法表。

    学习技术不只是为养家糊口,也为夜深人静的时候能够一个人静静享受这其中的乐趣。
  • 相关阅读:
    (数据看成字符串)大端——高尾端,小端——低尾端链接
    ASP.NET 页生命周期概述
    asp.net web 开发登录相关操作的控件LoginName、LoginStatus和LoginView控件使用详解
    Server.MapPath()目录详解
    C# ASP.NET FILEUPLOAD详解
    HTML中id、name、class 区别
    注册表新建 -------DWORD(32-位)
    XSD标准架构-----<xsd:element> 元素详解
    html5学习链接
    关于HSL和HSV颜色空间的详细论述
  • 原文地址:https://www.cnblogs.com/renxs/p/2649425.html
Copyright © 2011-2022 走看看