静态成员#
来源:
D:\study\C#1\stu0724
一、静态成员 vs 非静态成员#
核心区别#
| 对比项 | 静态成员 (static) |
非静态成员(实例成员) |
|---|---|---|
| 访问方式 | 类名.成员名 |
对象名.成员名(需先实例化) |
| 存储位置 | 存储在类上,所有对象共享同一份 | 每个实例化对象各有一份 |
| 生命周期 | 类加载时创建,程序结束时销毁 | 对象创建时创建,GC 回收时销毁 |
| 能否访问非静态 | ❌ 静态方法只能访问静态成员 | ✅ 可以访问静态和非静态成员 |
示例 1:People 类 — 静态与实例成员对比#
namespace st0724
{
class People
{
// ── 非静态成员 ──
public int Id { get; set; }
public string Name { get; set; }
public void Test()
{
Console.WriteLine("非静态");
Test00(); // 非静态方法可以调用静态方法
}
// ── 静态成员 ──
public static string Name2 { get; set; }
public static void Test00()
{
Console.WriteLine("静态方法");
// Console.WriteLine(Name); // ⚠️ 编译错误:静态不能访问非静态成员
}
}
}
访问方式:
⚠️ 注意:静态成员属于类本身,不属于任何实例。调用静态方法时,方法内部无法使用
this引用,也无法直接访问实例字段/属性。
二、静态成员的共享特性演示#
示例 2:非静态计数器 vs 静态计数器#
namespace test
{
class Test // 非静态计数器
{
int num = 0;
public void Add() { num++; }
public void Show()
{
Console.WriteLine(num + "非静态成员");
}
}
class Test2 // 静态计数器
{
static int num = 0;
public void Add() { num++; }
public void Show()
{
Console.WriteLine(num + "静态成员");
}
}
}
运行对比:
// ── Test(非静态)──
Test t1 = new Test();
Test t2 = new Test();
t1.Add(); // t1.num = 1
t1.Show(); // 输出 "1非静态成员" ← 只有 t1 自己的 num
t2.Show(); // 输出 "0非静态成员" ← t2 的 num 仍然是 0
// ── Test2(静态)──
Test2 test = new Test2();
Test2 test2 = new Test2();
test.Add(); // num = 1 (所有对象共享同一个 num)
test2.Add(); // num = 2
test.Add(); // num = 3
test.Show(); // 输出 "3静态成员" ← test 和 test2 操作的是同一个 num
关键理解:非静态成员每个对象独立拥有一份;静态成员所有对象共用一份,无论哪个对象操作,修改的都是同一份数据。