"C#图解教程第6章深入讲解了类的高级特性和成员,包括类成员的声明、实例成员、静态字段、从类外部访问静态成员以及静态函数成员的概念和使用方法。"
在C#编程中,类是构建对象的基础,而第六章主要探讨了类的进阶特性。首先,类成员可以分为实例成员和静态成员。实例成员与类的每一个实例关联,每个实例都有自己独立的成员副本,而静态成员则是由类本身维护,所有实例共享。这体现在内存分配上,实例成员为每个实例分配存储空间,静态成员则只分配一次。
6.1 类成员的声明允许我们定义类的属性和行为,修饰符如`public`、`private`、`static`等用于控制成员的访问权限和生命周期。修饰符的顺序在语法上是灵活的,但通常建议按照特定顺序(如访问修饰符、静态/实例、然后是特性)进行排列,以提高代码可读性。
6.2 实例成员是与类的每个实例相关联的成员,例如字段或方法。它们存储在每个实例的内存空间中,改变一个实例的实例成员不会影响其他实例。例如,类`Customer1`中的`Name`属性就是实例成员,每个`Customer1`的实例都有自己的`Name`。
6.3 静态字段是所有类的实例共享的,它们在类加载时分配内存,并且所有实例都访问同一个内存地址。这意味着更改一个实例的静态字段会影响所有实例。例如,`Customer1`类中的`Sex`枚举类型字段`m_sex`若声明为静态,将适用于所有`Customer1`实例。
6.4 从类外部访问静态成员,需通过类名直接调用,无需创建类的实例。例如,`Test.y = 1;`可以访问并修改`Test`类的静态字段`y`。
6.5 静态函数成员,即静态方法,不依赖于类的实例,它们可以直接由类名调用。静态方法只能访问静态成员,因为它们在运行时没有与特定实例相关联。例如,`Test`类中的`G`方法是静态的,它可以访问静态字段`y`,但不能访问实例字段`x`。
下面的代码示例展示了静态和非静态成员的使用:
```csharp
class Test
{
int x; // 实例字段
static int y; // 静态字段
void F() // 实例方法
{
x = 1; // 正确,等价于 this.x = 1
y = 1; // 正确,等价于 Test.y = 1
}
static void G() // 静态方法
{
x = 1; // 错误,不能访问 this.x
y = 1; // 正确,等价于 Test.y = 1
}
static void Main(string[] args)
{
Test t = new Test(); // 创建实例
t.x = 1; // 正确
t.y = 1; // 错误,不能访问实例的静态字段
}
}
```
在这个例子中,`F`方法作为实例方法,可以访问实例字段`x`和静态字段`y`。然而,静态方法`G`只能访问静态字段`y`,不能访问实例字段`x`。在`Main`方法中,创建了一个`Test`实例`t`,可以修改实例字段`x`,但不能直接修改静态字段`y`。
了解这些概念对于理解和编写面向对象的C#代码至关重要,尤其是在处理类的实例化、内存管理以及成员访问时。正确地使用静态和实例成员能够优化代码结构,提高效率,并确保数据的一致性和安全性。