博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类型是什么
阅读量:3966 次
发布时间:2019-05-24

本文共 3107 字,大约阅读时间需要 10 分钟。

类型与类型的分类(.NET FrameWork底层结构)
前言:int a=5;//   a是一个变量,它的本质是一个System.Int32结构体的对象实例
类型到底是什么:类型是任何编程语言最底层的东西(所以每当提到XX是类型,不要想它的继承关系,因为它是代表底层的数据或数据结构)
                                  类型是一组
关键字,它同于声明一个
标识符
基本数据类型或者
抽象数据结构类型
                            类型决定了一块内存到底要存什么样的数据/数据块或要刻画什么样的数据结构模板;
                            在.NET中,类型关键字和其他关键字一样,用
蓝色字体
1)基本数据类型:基本数据类型类型声名的标识符称为
变量,变量用来直接用于存储数据的值
                 基本数据类型的声明可以在数据结构类型中和方法体中,不允许定义在命名空间里
                   
基本数据类型的定义就是一个定义变量的过程;
                    值类型:值类型的基本数据类型声明的变量直接存储值;( int,float,char,bool)
                    引用类型:引用类型的基本数据类型声明的变量用于存储对值(对象)的引用; ( string、数组、object )
            
2)抽象数据结构类型:抽象数据结构的类型可以定义在命名空间中和数据结构类型中,不允许定义在方法体中
类是一个数据结构,我们把class,interface,delegate,struct,enum具有平行关系的(可以用于声明变量的)类型声明关键字统称抽象数据结构类型
     抽象数据结构类型声明的又是一个
自定义的数据类型(模型、模板),也就是说,一个抽象数据结构类型的标识符被定义完成之后,仍然作为一个类型的关键字来声明变量(这个变量就是自定义数据类型(模板)的对象,或者称为模板的实例化(类的实例化,委托的实例化,结构体的实例化、枚举的实例化....));
                  抽象数据类型的定义是一个建立模板的过程(或者说是建立一个自定义类型的过程);
                 
 模板被实例化,是一个模板被印刷的过程;被实例化后的模板就可以和其他 变量一样使用(变量就是一个对象);
.NET被声明的
抽象数据结构类型标识符用
绿色字体(一个定义好的接口、枚举使用绿色)和 浅蓝色字体(一个定义好的类、结构体使用浅蓝色
                   
 值类型:值类型的抽象数据结构类型所声明的类型的对象,他的值将用于直接存储对象实例的值;(
Struct,Enum);
                  引用类型:引用类的抽象数据结构类型所声明的类型的对象,它的值是一个对对象实例的引用
(class,Interface,delegate)                  
基本数据类型和抽象数据类型都分为值类型和引用类型,
它们的值类型直接存储(变量的值)/(对象的实例);
它们的引用类型存储(对值的引用)/(对对象实例的引用);
                      
规范化语言(更利于我逻辑清晰的理解知识)
1.当我们使用类型关键字声明一个模板或一个变量时,称这个模板/变量就是这个类型关键字,例如:
        class A{},称A是一个类/  A是类类型的;
        delegate void B{},B是一个委托/  B是委托类型的
        GameObject Go;Go是一个GameObject/  Go是GameObeject类型的
        string s;s是一个字符串/  s是字符串类型的


.NET中类型的隐式继承关系:(万物皆对象
隐式继承在声明一个基本数据类型的变量或一个抽象数据类型的模板之后自动完成;
当使用基本数据类型关键字声明一个变量时,这个变量的值就是.Net中一个封装好的类(结构体)的实例
当使用抽象数据结构类型关键字声明一个模板时,.NET会让这个变模板会自动的按照后面的路径隐式继承在.NET中已经封装好的类/接口
tips:一些类型的隐式继承关系按F12是看不到的 ,必须在.NET文档中才能查看
1)值类型的隐式继承关系:(inherited by ValueType->Object)
         使用值值类型声明的关键字是一个变量/对象,变量用于直接存储值;c#中,所有的值类型都隐式继承自
ValueType
下面表述了值类型的
继承层次
基本数据类型:
int关键字->Int16(struct)/
Int32(Struct)/Int64(Struct)->System.Valuetype->System.Object
上述含义是指:当使用int关键字声明一个整型变量时,这个变量本身是.NET中封装好的Int32结构体的一个对象;
char关键字->System.
Char->System.ValueType->System.Object  //
即一个char类型的变量实际上是一个System.Char结构体的对象
bool关键字->System.
Boolean(Struct)->System.ValueType->System.Objecct
float关键字->System.
Single(Struct)->System.ValueType->System.Objecct
......
综上:值类型的基本数据类型声明的变量本质是一个.NET预定义的结构体的对象,而这个结构体直接或者间接继承自System.ValueType
抽象数据结构类型
enum关键字->
System.Enum(abstrct class)->System.ValueType->System.Object(Class)
上述含义是指,当使用Enum关键字声明一个枚举时,.NET会让这个枚举会自动的按照后面的路径隐式继承在.NET中已经封装好的类/接口,下同
Struct关键字->System.ValueType->System.Object
综上:值类型的数据结构类型所声明的模板直接或者间接继承自System.ValueType
2)引用类型的隐式继承关系:
基本数据类型:
string关键字->System.String(class)->System.Object
[]数组->System.Array(class)->System.Object
抽象数据结构类型:
class关键字(未显示声明继承关系时)->System.Object
上述含义是指:当使用class关键字声明一个类时,这个类会自动继承自.NET中已经封装好的基类Object
delegate关键字->System.Delegate(class)->System.Object
Interface关键字( 未显示声明继承关系时)->不是System.Object的扩展类型,使用它声明的接口不不继承任何已封装好的类(
特殊
理解:使用c#等面向对象语言,万物皆对象不只是口号,更体现在了.NET FrameWork底层的类层次结构中;
1.所有用基本数据类型所声明的变量的本质:是其对应的已经封装好的类/结构体的对象;
例如:string声明的字符串变量本质是System.String类的对象;
操作:string s="";//使用F12会搜索到System.String类,说明s是System.String类的对象
2.所有的抽象数据结构类型所声明的模板,本质上都继承了已经封装好的类(interface除外,它没有继承自任何已封装好的类/结构体);
例如:delegate声明的委托,本质上是继承自System.Delegate类
当我们使用抽象数据类型声明时,我们实际上是在建立模板
当我们使用基本数据类型或模板名声明时,我们实际上是在创建模板的实例
所以说,不管是基本数据类型声明的变量,还是模板的实例,
本质上都是类/结构体/接口的对象实例,即万物皆对象

转载地址:http://ebuki.baihongyu.com/

你可能感兴趣的文章
View 事件传递
查看>>
android 各式各样progress 进度条大全
查看>>
Android事件分发机制完全解析,带你从源码的角度彻底理解
查看>>
开发Google眼镜的app
查看>>
Android base-adapter-helper 源码分析与扩展
查看>>
Android 快速开发系列 打造万能的ListView GridView 适配器
查看>>
Android 4.4从图库选择图片,获取图片路径并裁剪
查看>>
Android Fragment 你应该知道的一切
查看>>
使用AudioManager调节播放器音量的开发实例
查看>>
Android: ApiHelper
查看>>
BaseAnimation是基于开源的APP,致力于收集各种动画效果(最新版本1.3)
查看>>
安卓开发者必备的42个链接
查看>>
为GridView添加HeaderView
查看>>
我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!
查看>>
Android时间获取与使用
查看>>
Android WebRTC 音视频开发总结(一)
查看>>
用Gradle 构建你的android程序
查看>>
Android监听应用程序安装和卸载实现程序
查看>>
Android 监听apk安装替换卸载广播的实现代码
查看>>
Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
查看>>