C#不同类型的成员变量(字段)的默认值介绍


在C#中,不同类型的成员变量(字段)会根据其类型自动赋予默认值。这里是一些常见类型及其默认值的简要介绍:

1. **值类型(Value Types)**

- **整型(Integer Types)**:包括`int`、`long`、`short`、`byte`、`sbyte`、`uint`、`ulong`、`ushort`。它们的默认值都是`0`。

- **浮点型(Floating-Point Types)**:`float`的默认值是`0.0f`,`double`的默认值是`0.0`。

- **字符型(Char Type)**:`char`的默认值是`\0`,即空字符。

- **布尔型(Boolean Type)**:`bool`的默认值是`false`。

- **结构体(Struct Types)**:所有字段都被初始化为它们各自类型的默认值。如果结构体包含引用类型,那么引用类型的字段会被初始化为`null`(对于可空值类型除外)。

- **可空值类型(Nullable Types)**:任何值类型后面加上`?`都可以成为可空值类型,如`int?`、`DateTime?`等。它们的默认值是`null`。

- **枚举类型(Enum Types)**:枚举的默认值是它们的基础类型(通常是`int`)的默认值,即`0`。

2. **引用类型(Reference Types)**

- **类(Class Types)**:类的实例字段的默认值取决于字段的类型。对于引用类型字段,默认值是`null`。

- **接口(Interface Types)**:和类类似,接口类型的字段的默认值也是`null`。

- **数组(Array Types)**:数组的默认值是`null`。注意,数组的每个元素(如果数组被初始化)的默认值取决于元素的类型。

- **字符串(String Type)**:`string`是一个特殊的引用类型,其默认值是`null`或空字符串`""`,具体取决于上下文(在局部变量中默认为`null`,在字段中通常是`null`,但在某些情况下如C# 6.0的自动属性初始化器中可以是`""`)。但严格来说,字段的默认值在没有显式初始化的情况下是`null`。

需要注意的是,对于类的字段,如果它们在声明时没有显式初始化,那么它们将被初始化为它们类型的默认值。对于值类型字段,这意味着它们将被赋予上面列出的默认值。对于引用类型字段,这意味着它们将被初始化为`null`。

此外,从C# 6.0开始,可以使用自动属性初始化器为只读自动属性提供默认值,但这与字段的默认初始化不同,因为它实际上是在对象构造时执行的赋值操作。