39、我的C#学习笔记5
发布日期:2022-01-20 19:57:40 浏览次数:4 分类:技术文章

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

从概念上讲,值类型是直接存储其值,而引用类型存储对其值的引用。这两种类型存储在内存的不同地方。在C#中,必须在设计类型时就决定类型实例的行为。如果在编写代码时,不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常。

从内存空间上看,值类型是在栈中操作,而引用类型则在堆中分配存储单元。栈在编译时就分配好内存空间,在代码中有栈的明确定义,而堆是程序运行中动态分配的内存空间,可以根据程序的运行情况动态的分配内存的大小。因此,值类型总是在内存中占用一个预定义的字节数。而引用类型的变量则在堆中分配一个内存空间,这个内存空间包含的是对另一个内存位置的引用,这个位置是托管堆中的一个地址,即存放变量实际值的地方。

也就是说值类型相当于现金,要用就直接用,而引用类型相当于存折,要用得先去银行取。

C#的所有值类型均隐式派生自System.ValueType,而System.ValueType直接派生自System.Object。即System.ValueType本身是一个类类型,而不是值类型,其关键在于ValueType重写了Equals()方法,从而对值类型按照实例的值来比较,而不是引用地址来比较。

枚举类型是一种独特的值类型,它用于声明一组具有相同性质的常量。使用枚举可以增加程序的可读性和可维护性。同时,枚举类型可以避免类型错误。

本质上,枚举就是定义一个类,该类里面的属性都是静态的弱数据类型的常量。

在定义枚举类型时,如果不对其进行赋值,默认情况下,第一个枚举数的值为0,后面每个枚举数的值依次递增1

C#中使用关键字enum类声明枚举,其形式如下:

enum 枚举名

{

list1=value1,

list2=value2,

list3=value3,

...

listN=valueN,

}

如下代码:

class Program

{

enum MyDate

{

Sun=0,

Mon=1,

Tue=2,

Wed=3,

Thi=4,

Fri=5,

Sat=6,

}

public static void Main(string[] args)

{

int k=(int)DateTime.Now.DayOfWeek;

switch(k)

{

case (int)MyDate.Sun:Console.WriteLine("星期天");break;

}

}

}

类型转换:

类型转换就是将一种类型转换成另一种类型,转换可以是隐式转换,也可以是显示转换。对于类型转换,可以这么想象,大脑前面是一片内存,源和目标分别是两个大小不同的内存块(由变量及数据的类型来决定),将源数据赋值给目标内存的过程,就是用目标内存块取套取源内存中的数据,能套多少算多少。

隐式转换:就是不需要声明就能进行的转换。当一种类型的值转换为大小相等或更大的另一个类型时,则发生扩大转换,当一种类型值转换为较小的另一类型时,则发生收缩转换。

显式转换:

显式转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要把高精度的变量的值赋值给低精度的变量,就需要使用显式转换。

例如:创建一个控制台应用程序,将double类型的x转换为int类型。

public static void Main(string[] args)

{

double x=1234566.789958546;

int y=(int)x;

Console.WriteLine(y);

Console.ReadLine();

}

显式类型转换也可以通过Convert关键字进行显示类型转换。

比如:创建一个控制台应用程序,通过Convert进行显示类型转换。

public static void Main(string[] args)

{

double a=123;

int b=Convert.ToInt32(a);

Console.WriteLine(b);

Console.ReadLine();

}

装箱和拆箱:

将值类型转换为引用类型的过程叫做装箱。相反,将引用类型转换为值类型的过程叫做拆箱。

装箱允许将值类型隐式转换为引用类型。比如:

int a=1;

object b=i;

//这里的b就是引用类型。

拆箱允许将引用类型显示转换为值类型。

装箱是将一个值类型转换为一个对象类型,而拆箱是将一个对象类型显示转换为一个值类型。对于装箱而言,他是将被装箱的值类型复制为一个副本来转换,而对于拆箱而言,需要注意类型的兼容性。例如:不能将一个值为:stringobject类型转换为int类型。

常量就是其值固定不变的量。而且常量的值在编译时就已经确定了。C#中使用const定义常量,并且在创建常量是必须设置它的初始值。常量就相当于每个公民的身份证号,一旦设置就不允许修改。

转载地址:https://blog.csdn.net/bingqinxingzhu/article/details/78362757 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:40、我的C#学习笔记6
下一篇:38、我的C#学习笔记4

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月25日 09时34分15秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

idea xml文件引入类提示_IDEA中导入多module的Maven项目后子项目不正常的情况 2019-04-21
太赫兹芯片是什么原理_什么是太赫兹技术?艾舒朗太赫兹理疗鞋——脑梗后遗症+便秘+久站腿疼腿肿案例... 2019-04-21
exfat默认配置大小_mac开发配置技巧 2019-04-21
三星k3梅林没有软件中心_10万出头买顶配,1.4T合资家轿起亚K3换新,还带换挡拨片... 2019-04-21
k8s边缘节点_边缘计算容器及K8S应用的三种场景及部署选项 2019-04-21
诸葛io的技术架构图_基于泳道技术生成“无数”个测试环境 2019-04-21
互相引用 spring_# 技术笔记:spring、springBoot源码解析 2019-04-21
华为发布岳云鹏手机_鸿蒙2.0正式发布:明年华为手机全面升级 2019-04-21
ifpc挖filecoin_Filecoin挖矿分析全套 不容错过的干货 2019-04-21
python扫雷 高级算法_Python玩转算法—扫雷 2019-04-21
牛客网python测试考试答案_牛客网SQL题库之考试分数 2019-04-21
git获取所有branch_使用jGit 通过gitUrl 获取Git的所有分支 2019-04-21
mysql like 数字结尾_重拾MySQL之正则表达式 2019-04-21
mysql where从句_《快速念咒——MySQL自学入门指南》:第1章第8节:模糊查询LIKE——一窝兔子(上)... 2019-04-21
mysql 重置密码_mysql忘记密码如何重置密码,以及修改root密码的三种方法 2019-04-21
python-docx tables后追加内容_Mac brew安装MySQL8.0.21后忘记密码(重置密码篇) 2019-04-21
python中两个时间相减结果转为小时_Python起步(二)基础数据类型1 2019-04-21
定义泛化。举个例子_网易考拉应用的dubbo泛化调用,是如何实现的? 2019-04-21
mysql里可以用cube吗_sql server的cube操作符使用详解_mysql 2019-04-21
php mysql 图书_使用PHP+MySQL来对图书管理系统进行构建 2019-04-21