📜  表示不可变和可变 - C# (1)

📅  最后修改于: 2023-12-03 15:41:32.813000             🧑  作者: Mango

不可变和可变

C#中,数据类型可以被分为可变和不可变。不可变类型的数据对象在被创建后,其值不能被修改。而可变类型的数据对象允许其值被修改。这种不同类型的数据对象使用的是不同的内存存储方式。

不可变类型

不可变类型是指在创建后,其值不能被修改的类型。例如,C#中的字符串类型就是不可变类型。这意味着,一旦创建了一个字符串对象,它就不能被修改。任何尝试修改这个对象的操作都会返回一个新的字符串对象。

以下是一个演示不可变类型的示例代码:

string str1 = "Hello";
string str2 = str1;
str1 += " World";
Console.WriteLine(str1); // 输出 "Hello World"
Console.WriteLine(str2); // 输出 "Hello"

在这个示例中,我们首先创建了一个字符串对象str1并把它赋值给了str2。然后我们对str1执行了一个字符串拼接操作,使其变为了"Hello World"。但请注意,当我们打印str2时,它仍然是 "Hello",因为字符串类型是不可变类型。

在C#中,以下类型都是不可变类型:

  • String
  • Char
可变类型

与不可变类型相反,可变类型是指在创建后,其值可以被修改的类型。例如,C#中的数组和列表类型都是可变类型。这意味着,我们可以随意地修改它们的元素,而不必创建一个新的数组或列表对象。

以下是一个演示可变类型的示例代码:

int[] arr1 = { 1, 2, 3 };
int[] arr2 = arr1;
arr1[0] = 0;
Console.WriteLine(arr1[0]); // 输出 "0"
Console.WriteLine(arr2[0]); // 输出 "0"

在这个示例中,我们首先创建了一个整型数组arr1并把它赋值给了arr2。然后我们把arr1数组的第一个元素修改为0。请注意,当我们打印arr2时,它也是0,这是因为数组类型是可变类型。

在C#中,以下类型都是可变类型:

  • Array
  • List
总结

C#中,数据类型可以被分为可变和不可变类型。不可变类型的对象在创建后,其值不能被修改,而可变类型的对象允许其值被修改。理解这些类型的区别非常重要,因为它们对C#代码的性能和可维护性都有着重要的影响。