- 访问方式:静态成员可以通过类名直接访问,而非静态成员需要通过类的实例来访问。
- 存储位置:静态成员存储在静态数据区,而非静态成员存储在堆栈或堆中,具体取决于它们所属的对象。
- 生命周期:静态成员在程序运行期间只有一份拷贝,而非静态成员每个对象都有一份拷贝。静态成员在程序启动时被初始化,在程序结束时被销毁,而非静态成员的生命周期与对象的创建和销毁相关。
- 共享性:静态成员是类的所有实例共享的,可以用于保存全局状态或者共享数据。非静态成员是每个对象独有的,每个对象都有自己的一份。
- 访问权限:静态成员可以访问类的所有成员,包括私有成员。非静态成员只能访问类的非静态成员。
下面是一个示例代码,演示了静态成员和非静态成员的使用:
public class MyClass
{public static int staticField; // 静态字段public int nonStaticField; // 非静态字段public static void StaticMethod(){Console.WriteLine("这是一个静态方法");}public void NonStaticMethod(){Console.WriteLine("这是一个非静态方法");}
}public class Program
{public static void Main(string[] args){MyClass.staticField = 10; // 访问静态字段Console.WriteLine(MyClass.staticField);MyClass obj1 = new MyClass();obj1.nonStaticField = 20; // 访问非静态字段Console.WriteLine(obj1.nonStaticField);MyClass obj2 = new MyClass();obj2.nonStaticField = 30;Console.WriteLine(obj2.nonStaticField);MyClass.StaticMethod(); // 调用静态方法obj1.NonStaticMethod(); // 调用非静态方法obj2.NonStaticMethod();}
}
10
20
30
这是一个静态方法
这是一个非静态方法
这是一个非静态方法