C# Values 完整攻略
什么是 C# Values?
C# Values(中文名:C# 值类型)是指在 C# 编程语言中,除了引用类型(reference types)之外的所有基本数据类型(如整型、浮点型、字符型等)以及由这些基本类型组成的结构体(structs),统称为值类型。值类型存储在堆栈中,这意味着值类型比引用类型更高效,更快速。因为值类型直接存储在内存中,不需要动态分配和释放内存。
C# Values 的基本类型
C# 中的基本类型包括以下几种:
- bool
- byte
- char
- decimal
- double
- enum
- float
- int
- long
- sbyte
- short
- struct
- uint
- ulong
- ushort
其中,前 14 种基本类型都是结构体类型(structs)。
值类型的使用与声明
在 C# 中,我们可以使用关键字 struct
来声明一个结构体类型。以下是一个使用 struct
关键字声明值类型的示例:
struct Person
{
public string Name;
public int Age;
public bool IsMale;
}
上述代码定义了一个名为 Person
的结构体类型,包含三个成员变量:Name
、Age
、IsMale
,分别表示人的姓名、年龄和性别。每个成员变量都有一个访问修饰符 public
,这意味着它们可以在任何地方被访问。
我们可以使用以下代码将 Person
结构体实例化:
Person john = new Person();
john.Name = "John Doe";
john.Age = 30;
john.IsMale = true;
上述代码创建了一个名为 john
的 Person
结构体实例,并对其成员变量进行了初始化。
我们也可以使用对象初始化器的方法,用更简洁的代码初始化 Person
结构体实例:
Person jane = new Person { Name = "Jane Doe", Age = 25, IsMale = false };
上述代码创建了一个名为 jane
的 Person
结构体实例,并使用对象初始化器将其成员变量进行了初始化。
值类型与引用类型的比较
值类型和引用类型的区别在于内存管理方式。值类型被存储在堆栈上,而引用类型(如类、接口和委托)则需要在堆上动态分配和释放内存。由于内存分配和释放的开销较高,所以值类型比引用类型更高效、更快速。
下面是一个示例,展示了值类型和引用类型在内存中的存储方式:
struct Point
{
public int X;
public int Y;
}
class Program
{
static void Main(string[] args)
{
int x = 10; // 值类型
Point p = new Point { X = 1, Y = 2 }; // 值类型
string s = "Hello World"; // 引用类型
object o = new object(); // 引用类型
}
}
在上面的示例中,变量 x
和 p
是值类型,它们在内存中的存储方式为堆栈,且内存的大小是固定的。而 s
和 o
是引用类型,它们在内存中的存储方式为堆,且内存的大小是动态分配的。
值类型与引用类型的传递方式
在 C# 中,值类型和引用类型的传递方式有所不同。值类型通常采用按值传递的方式传递给函数或方法,即传递的是该值类型的一个复制品。而引用类型通常采用按引用传递的方式传递给函数或方法,即传递的是该引用类型的地址。
下面是一个示例,展示了值类型和引用类型的传递方式:
class Program
{
static void Main(string[] args)
{
int x = 10;
Point p = new Point { X = 1, Y = 2 };
Foo(x, p);
Console.WriteLine(x); // 输出:10
Console.WriteLine(p.X); // 输出:20
}
static void Foo(int x, Point p)
{
// 值类型参数的值被复制到了新的变量中,因此修改不会影响原变量的值
x = 20;
// 引用类型参数传递的是该对象的地址,因此修改会影响原对象的值
p.X = 20;
}
}
总结
C# Values 是 C# 编程语言中的基本数据类型和结构体类型的统称。与引用类型相比,值类型更高效、更快速,因为它们直接存储在堆栈中,不需要动态分配和释放内存。值类型的声明和使用方式也有所不同,需要注意。在使用值类型和引用类型时,需要注意它们在内存中的存储方式和传递方式的不同。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Values:获取 ICollection,其中包含 IDictionary