• 闲谈.NET中的类型和访问修饰符


    关于类型

    关于.NET中类型,在网上很多地方我们可以看到的是:值类型和引用类型两种。我也这么认为的,貌似这样认为也没有错。但本文从学术角度来说说,想到哪里就说到哪里了,各位就当是茶语饭后喝其他同事闲谈扯淡,听听就行,百家争鸣,不洗勿喷。

    其实还有两种,如下:

    简单的说一下:

    Value types:继承自System.ValueType的类型。

    Generic type parameters:带泛型参数的类型,即DebugLZQ在泛型中提到过的所谓“开类型”,其特点是在T被指定之前无法被实例化。可参考下DebugLZQ前面的这篇博文:浅谈.NET中泛型的基本原理 

    pointer types:指针类型,一种unsafe的非托管类型。

    Reference types:非以上三种类型的其他类型。需要注意的是System.ValueType和所有的引用类型都继承自 System.Object基类。

    我们通常讲,在.NET中System.Object是所有类型的基类,其实我们完全也可以自己定义一个类不继承自System.Object,只不过.NET强烈不推荐我们这样去做。有兴趣的可以去查下CLR,看看具体的实现。其实.NET中所有的既有的接口,例如IList、IEmumerable、ICollection,都不继承自System.Object,因为当你打开其IL你找不到extends System.Object这样的标识,其实接口不继承自任何类。参见王涛的这篇博文:[你必须知道的.NET]第二十七回:interface到底继承于object吗?

    关于访问修饰符 

    本来没打算写这块,既然都说了类型了,就把访问修饰符也拿过来写写,凑个字数 - -!。

     

    做个表格解释下:

    C# 术语

    CLR术语

    private

    Private

    protected

    Family

    不支持

    Family and Assembly

    internal

    Assembly

    protected internal

    Family or Assembly

    public

    Public

    仍记得面试这家公司时,技术副总聊的第一个问题就是.NET类型和访问修饰符,当时我回答的是后者,然后聊得很愉快。

    记得说下本文中的截图来自《C# 5.0 in a Nutshell》,之所以用截图,是为了增加本文的说服性。(无凭无证,谁闲的蛋疼听你瞎扯淡, - -!)

    没什么高端的技术,高手绕行、轻拍...

  • 相关阅读:
    Qt ------ QPainter 和控件组件的重绘
    Qt error ------ no matching function for call to QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))
    DHCP 服务器功能
    matlab --- plot画图
    网站跨域解决方案有哪些
    分布式Session一致性解决方案有哪些?
    博客收集
    idea快捷键
    Linux打包、压缩与解压详解
    lastIndex()与IndexOf()的区别
  • 原文地址:https://www.cnblogs.com/DebugLZQ/p/3103632.html
Copyright © 2020-2023  润新知