在C#中,静态成员和非静态成员是面向对象编程中非常重要的概念,它们有以下区别:
- 静态成员是属于类的,而非静态成员是属于对象的。
- 静态成员可以通过类名直接访问,而非静态成员只能通过对象名访问。
- 静态成员在程序启动时被初始化,而非静态成员在每个对象创建时被初始化。
下面是一个使用静态成员和非静态成员的实例:
class Program
{
static void Main(string[] args)
{
// 创建两个Student对象
Student s1 = new Student("Tom", 18);
Student s2 = new Student("Jerry", 20);
// 访问静态成员
Student.SchoolName = "ABC School";
Console.WriteLine(Student.SchoolName); // 输出: ABC School
// 访问非静态成员
Console.WriteLine(s1.Name); // 输出: Tom
Console.WriteLine(s2.Name); // 输出: Jerry
Console.WriteLine(Student.Count); // 输出: 2(静态成员)
// 修改实例对象的数据
s1.Name = "Mike";
Console.WriteLine(s1.Name); // 输出: Mike
Console.WriteLine(s2.Name); // 输出: Jerry
}
}
class Student
{
// 静态成员(学校名称)
public static string SchoolName;
// 静态成员(学生数量)
public static int Count = 0;
// 非静态成员(姓名)
public string Name;
// 非静态成员(年龄)
public int Age;
// 构造函数
public Student(string name, int age)
{
Name = name;
Age = age;
Count++; // 每创建一个对象,静态成员Count增加1
}
}
在上述代码中,Student类包含一个静态成员SchoolName和一个静态成员Count,它们属于类,并且可以通过类名访问。同时,Student类还包含两个非静态成员Name和Age,它们属于每个实例对象,并且只能通过实例对象名访问。
在Main方法中,创建了两个Student对象s1和s2,通过Student类访问了静态成员SchoolName和静态成员Count,以及通过实例对象访问了非静态成员Name,并修改了s1的Name属性值。