C# 学习笔记 - 1.2 - 变量

发布时间 2023-08-21 20:26:11作者: Snoopy1866

变量

Field, local variables, and parameters

Field

每个字段的可见性有以下几个级别(可见性逐渐降低):

  • public
  • protected
  • internal
  • protected internal
  • private

Local variables

Parameter

  • in parameter
    • 值类型(int, double, string)传入函数,不能改变调用者所处环境下的变量;
    • 引用类型(object)传入函数,可以改变调用者所处环境下的变量。
  • out parameter 没有复制变量值后再传入,所以对变量的改变将会直接影响调用者所处环境下的变量
  • reference parameter 与 out parameter 类似
  • params parameter 可变参数,必须是函数的最后一个参数

Types

Value types

值类型存储在栈(stack)中

Reference types

引用类型存储在堆(heap)中。

引用类型包含两部分:指向堆(包含对象)的指针和对象自身。当对象通过构造函数被初始化时,CLR(Common Language Runtime)执行以下下操作:

  1. 计算堆中需要存储对象的内存大小
  2. 将数据插入到新开辟的内存空间
  3. 标记空间结束的位置,以便下一个对象可以存放
  4. 返回新创建内存空间的一个引用

装箱(boxing):值类型转为引用类型

拆箱(unboxing):引用类型转为值类型

内置C#类型别名和对应的 .NET Framework 类型:



Custom types

自定义值类型使用关键字 sturct 和 enum 声明,自定义引用类型使用关键字 class 声明。

Conversion

根据预定义转换规则,类型之间可以显式或者隐式转换。

  • 若类型转换不会丢失信息,则转换是隐式的(即不需要强制类型转换)
  • 若从一个基态类转换到继承自它的类,则转换是显式的
  • 若从一个接口转换到实现它的类,则转换是显式的
  • 若要转换的值不是目标类或目标类的任何派生类的实例,则运行时环境将抛出异常

Scope and extent