C#学习笔记之数据结构、变量和常量

1.数据类型

(1)类型系统
(2)值类型
(3)引用类型
(4)装箱和拆箱
C#中所有的类型都继承于System.Object根类型,而所有的值类型都继承于System.ValueType类型。通过装箱和拆箱机制,可以实现值类型和引用类型之间的转换。
装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或把这个值类型转换成一个被该值类型应用的接口类型。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于托管堆中。
拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型。注意,装箱操作可以隐式进行,但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看其值是否为给定值类型的装箱值;然后,把这个对象实例的值复制给值类型的变量。
装箱转换把值类型转换为引用类型后,可以方便调用相应对象实现的方法。值得注意的是,装箱和拆箱操作,会导致额外的系统内存配置开销。
(5)预定义数据类型

2. 值类型和引用类型

(1)值类型

  • 简单类型(Simple type):
    整形
    浮点型
    十进制型(decimal)
    布尔型(bool)
    字符型(char)

    对于简单类型 ,要特别说明的是:
    ① 所有的简单类型均为 .NET Framework系统类型的别名,即每一个简单类型都有相应的 .NET Framework类型与之对应
    ② 简单类型可以使用文字初始化,也可以使用new调用默认的构造函数进行初始化。
    所谓的两种初始化如下所示:
    int myint;//声明变量
    myint=0;//或者 myint=new int ();
    当然也可以声明和初始化一起完成。
    注意:在C#中,局部变量不进行初始化是无法使用的。

  • 结构类型(Struct type): struct
    struct类型是一种可包含构造函数、常数、字段、方法、属性、索引器、运算符、事件和嵌套类型的值类型。
    这里就有一个问题:有了class,为什么还需要struct?
    struct类型适合表示如点、矩形和颜色这样的轻量对象,尽管可能将一个点表示为类,但结构在某种方案中更有效。例如,如果声明含有1000个点对象的数组,则将为引用每个对象分配附加的内存,在此情况下,结构成本较低。没错,因为struct是值类型,所以它会更高效。
    关于struct,还有一些要注意:
    ① 声明结构的默认(无参数)构造函数是错误的,系统总是提供默认构造函数初始化结构成员。
    ② 在结构中初始化实例字段是错误的。
    ③ 如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。
    ④ 结构不存在继承,但结构从基类Object继承,结构可实现接口,其方法同类完全一样。
    ⑤ 你可以对构造函数进行重载。
    ⑥ struct是值类型,请在参数传递时注意这一点,另外,struct的数据成员(字段)可以是其他的引用类型。

  • 枚举类型(Enumeration types):enum
    由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型均有一种基础类型,此基础类型可以是除 char 类型外的任何整型。
    在这里插入图片描述
    (2)引用类型:

  • 类(class)

  • 接口(interface)

  • 委托(delegate)

值类型与引用类型的区别:

  • 值类型的变量总是包含该类型的值,对值类型变量赋值将创建所赋的值的一个副本,而对引用变量赋值将创建引用的副本,而不是引用对象的副本。
  • 所有的值类型均隐式派生自Object类。
  • 与引用类型不同,从值类型不可能派生出新的类型,但与引用类型相同的是,结构可以实现接口。
  • 与引用类型不同,值类型不可能包含null值。
  • 每种值类型均有一个隐式的默认构造函数来初始化该类的默认值。

3. 变量和常量

(1)变量
变量是指内存中的某个存储单元内容的值可以改变,在C#中用一个标识符表示变量,称之为变量名。该标识符必须满足以下要求:
①以字母或下划线符号()开头,后跟任何字母、数字和下划线符号()。
②标识符不能和C#中的关键字同名。

变量的分类(根据变量声明的位置):
①成员变量。在类型中声明,作为类型成员的变量,称为成员变量(即字段)。包括静态变量和非静态变量。
②局部变量。在类型的成员方法中声明的变量,称为局部变量。作为方法定义的参数,也属于局部变量,包括值参数、引用参数和输出参数。
变量可以为类型,也可以为类型的数组。指向数组的变量,称为数组元素。

有关常量与变量详细信息学习推荐博客:https://blog.csdn.net/Gnd15732625435/article/details/50836073
有关类型转换学习推荐博客:
https://blog.csdn.net/weixin_39885282/article/details/80135277

(2)常量

  • 文本常量:代码中出现的文本形式常数即文本常量,又称为字面常量。
  • 用户声明常量:在声明和初始化变量时,在变量的前面加上关键字const,就可以把该变量指定为一个常量。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常量是在程序中固定不变的,其在定义后不能被修改。在C#中,常量使用关键字"const"进行定义,并且必须在声明时进行初始化。常量通常用于表示特殊的,比如数学常数π或者物理常数光速等。常量的定义语法为:const <data_type> <constant_name> = <value>。常量在程序运行期间是不可改变的。 变量是在程序中用于存储和操作数据的一种容器。变量可以在程序运行过程中被修改。在C#中,变量的定义语法为:<data_type> <variable_name>。变量类型必须是一个合法的C#数据类型,并且变量的声明必须是有效的C#标识符。 总结起来,常量是固定不变的,而变量是可以被修改的常量在定义时必须进行初始化,而变量可以在任何时候进行赋。 #### 引用[.reference_title] - *1* *2* [【C#基础】C# 变量常量的使用](https://blog.csdn.net/weixin_61361738/article/details/128989509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C#变量常量](https://blog.csdn.net/weixin_57727027/article/details/124636035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值