编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

C#之值类型

gowuye 2024-05-16 14:23 3 浏览 0 评论

包括两个成员:结构体和枚举类型。一般字面上的数值都是值类型,例如int、double、bool等,实际上整数小数布尔值等都是结构体。

值类型默认值一般为0,例如整数小数,枚举类型默认值也为0。

基元类型

.NET语言都是运行在CTS上的,CTS提供了基本的类型,我们一般称为基元类型。虽然.NET下的各种语言使用的关键字不同,但最终映射的IL类型是同一个的,这样的类型就叫做基元类型,由CTS定义,编译器和BCL支持,是属于BCL而不是某一个具体的语言。基元类型包括几乎所有的值类型(当然除了开发者自定义的结构体和枚举),以及字符串,object和dynamic。

有了基元类型,.NET下的语言就更容易互操作。例如C#中int对应的基元类型为Int32,而VB.NET中int的关键字为Integer,它对应的类型依旧是Int32。

值类型的构造函数

对于值类型,构造函数必须为所有成员赋值,不支持无参构造函数。例如DateTime类型,是一个结构体,成员有年、月、日、时、分、秒、DayOfWeek等,有很多个构造函数,每个都有一个或多个输入。

何时考虑使用值类型

设置值类型的目的是为了提高程序的性能。

以下情况适合使用结构体:

  1. 对象的所有属性都需要在创建时赋值
  2. 对象的所有属性都是值类型。如果存在引用类型,就会牵扯到内存分配到堆上的问题。
  3. 当对象不需要被继承时。

例子:二维坐标系(包含两个double)、长方形(长、宽、面积等一些double)适合使用结构体。

值类型是密封的

值类型一定是密封的,不支持继承。如果值类型可以被其他类型继承,比如引用类型,那么它的创建就会牵扯到堆上的内存分配,违反了值类型的设计初衷。

值类型和引用类型的区别和联系

区别主要有:

1. 所有值类型隐式派生System.ValueType。这个类确保值类型所有成员全部分配到栈上,有例外:

  • 结构体含有引用类型时
  • 静态类型,一个变量是静态的,无论什么类型都会分配在加载堆上
  • 所以“值类型都分配在栈上,引用类型都分配在堆上”的说法是不准确的。

    2. 引用类型初值为null,值类型为0

    3. 引用类型栈中有一个变量名和变量类型,指向堆中的对象实例的地址。值类型仅有栈上的变量名和类型,不包括指向实例的指针。

    4. 值类型不能被继承, 引用类型可以。

    5. 值类型的生命周期是其定义域,值类型离开定义域就会立刻销毁,引用类型则会进入垃圾回收,至于何时销毁我们并不知道。

    6. 值类型的构造函数必须为所有成员赋值。

    7. 可以重写引用类型的析构函数,值类型不需要析构函数,因为析构函数只会被垃圾收集器调用

    联系主要有:

    1. 值类型和引用类型可以通过装箱和拆箱相互转化

    2. 类和结构都可以实现接口,结构体实现接口的例子:int、DateTime等都实现了IComparable接口,使得他们可以比较大小。

    相关推荐

    R语言数据挖掘实践——支持向量机的常用函数
    R语言数据挖掘实践——支持向量机的常用函数

    e1071包是R语言中用于支持向量机建模与分析的软件包,其主要用于支持向量机的模型构建,提供核心函数svm()来建立支持向量机的基础模型,并且可辅助使用pred...

    2024-05-18 12:15 gowuye

    R数据分析:如何做聚类分析,实操解析
    R数据分析:如何做聚类分析,实操解析

    Clusteringisabroadsetoftechniquesforfindingsubgroupsofobservationswi...

    2024-05-18 12:14 gowuye

    用R语言做数据分析——马赛克图
    用R语言做数据分析——马赛克图

    到目前为止,我们已经学习了许多可视化定量或连续型变量间关系的方法。但如果变量是类别型的呢?若只观察单个类别型变量,可以使用柱状图或者饼图;若存在两个类别型变量,...

    2024-05-18 12:14 gowuye

    用R语言做数据分析——方差分析基本概论
    用R语言做数据分析——方差分析基本概论

    在实际工作中,影响一件事的因素是很多的,我们总是希望通过各种试验来观察各种因素对试验结果的影响。例如,不同的生产厂家、不同的原材料、不同的操作规程,以及不同的技...

    2024-05-18 12:14 gowuye

    R语言数据分析实战:数据清洗与可视化
    R语言数据分析实战:数据清洗与可视化

    《R语言数据分析实战:数据清洗与可视化》是一本深入浅出的实践指南,专为对数据分析感兴趣的读者精心编撰。本书旨在帮助读者掌握R语言这一强大的统计分析工具,通过实例...

    2024-05-18 12:13 gowuye

    用R语言做数据分析——双因素方差分析
    用R语言做数据分析——双因素方差分析

    在双因素方差分析中,受试者被分配到两因子的交叉类别组中。以基础安装中的Tooth-Growth数据集为例,随机分配60只豚鼠,分别采用两种喂食方法(橙汁或维生素...

    2024-05-18 12:13 gowuye

    用R语言做数据分析——独立两样本和K样本检验
    用R语言做数据分析——独立两样本和K样本检验

    coin包简介对于独立性问题,coin包提供了一个进行置换检验的一般性框架,通过这个包,我们可以回答如下问题:响应值与组的分配独立吗?两个数值变量独立吗?两个类...

    2024-05-18 12:13 gowuye

    用R语言做数据分析——用回归做方差分析
    用R语言做数据分析——用回归做方差分析

    之前提到方差分析和回归都是广义线性模型的特例,之前文章的所有设计都可以用lm()函数来分析。为了更好地理解输出结果,需要弄明白在拟合模型时,R语言是如何处理类别...

    2024-05-18 12:13 gowuye

    数据分析R语言——数据结构
    数据分析R语言——数据结构

    数据分析R语言——数据结构数组数组(array)与矩阵类似,但是维度可以大于2.数组通过array()函数创建。形式如;myarray<-array(v...

    2024-05-18 12:13 gowuye

    R语言数据挖掘实践——关联分析的常用函数
    R语言数据挖掘实践——关联分析的常用函数

    arules和arulesViz是R语言中两个专用于关联分析的软件包。其中arules用于关联规则的数字化生成,提供Apriori和Eclat这两种快速挖掘频繁...

    2024-05-18 12:12 gowuye

    R语言数据挖掘实践——判别分析的常用函数
    R语言数据挖掘实践——判别分析的常用函数

    判别算法在R语言中实现主要涉及4个软件包中的相关函数,它们依次为MASS、klaR、class和kknn。其中MASS包含有大量实用而先进的统计计数函数及适用数...

    2024-05-18 12:12 gowuye

    用R语言读取Excel、PDF和JSON文件,终于有人讲明白了
    用R语言读取Excel、PDF和JSON文件,终于有人讲明白了

    导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

    2024-05-18 12:12 gowuye

    R语言数据挖掘实践——聚类分析的常用函数
    R语言数据挖掘实践——聚类分析的常用函数

    使用R语言可以轻松实现聚类分析,stats、cluster、fpc和mclust是常用的四个聚类分析软件包。stats主要包含一些基本的统计函数,如用于统计计算...

    2024-05-18 12:12 gowuye

    用R语言做数据分析——时间序列分类
    用R语言做数据分析——时间序列分类

    时间序列分类是根据已标注的时间序列建立一个分类模型,然后使用分类模型预测未标记时间序列的类别。从时间序列中抽取出新特征肯呢个有助于提高分类模型的性能。特征提取技...

    2024-05-18 12:11 gowuye

    一文看懂用R语言读取Excel、PDF和JSON文件(附代码)
    一文看懂用R语言读取Excel、PDF和JSON文件(附代码)

    导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

    2024-05-18 12:11 gowuye

    取消回复欢迎 发表评论: