欢迎光临
我们一直在努力

c#中关于静态与非静态

核心概念与关系解析

非静态成员(实例成员)属于某个具体对象的特征或行为。比如“人”这个类,每个人(对象)都有自己的姓名、年龄,这些就是实例成员。
静态成员(static)属于整个类的特征或行为,所有对象共享。比如“人”这个类的“物种名称”是“人类”,这个属性对所有“人”对象都一样,就适合定义为静态成员。

核心访问规则

静态与非静态之间最核心的关系总结为两条规则:

访问方能否访问非静态成员能否访问静态成员
非静态方法/属性 ✅ 可以直接访问 ✅ 可以直接访问
静态方法/属性 ❌ 不能直接访问 ✅ 可以直接访问

静态成员属于类本身,在程序启动后、还没创建任何对象时就已经存在;而非静态成员必须创建对象后才存在。静态方法执行时,可能根本没有任何对象,自然无法访问“不存在”的实例成员。

代码示例

通过一个完整的代码示例,演示静态与非静态的访问规则:

using System;

public class Student
{
public string Name;
public static string SchoolName = "北京大学";

public void ShowStudentInfo()
{
Console.WriteLine($"姓名:{this.Name}");
Console.WriteLine($"学校:{SchoolName}");
}

public static void ShowSchoolInfo()
{
Console.WriteLine($"学校名称:{SchoolName}");
Student tempStudent = new Student();
tempStudent.Name = "张三";
Console.WriteLine($"示例学生姓名:{tempStudent.Name}");
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine("直接访问静态成员:" + Student.SchoolName);
Student.ShowSchoolInfo();

Student student1 = new Student();
student1.Name = "李四";
student1.ShowStudentInfo();

Student student2 = new Student();
student2.Name = "王五";
Student.SchoolName = "清华大学";
student1.ShowStudentInfo();
student2.ShowStudentInfo();
}
}

补充说明

  • 静态类:标记为static的类只能包含静态成员,且不能被实例化。比如C#中的Math类。
  • 静态构造函数:用于初始化静态成员,只会执行一次,不能有参数。
  • 使用场景:
    • 静态成员:工具方法、全局共享的常量、统计类数据。
    • 非静态成员:对象的个性化属性或行为。

总结

非静态成员可直接访问静态或非静态成员;静态成员只能直接访问静态成员,访问非静态成员必须先创建对象。
非静态成员属于对象,静态成员属于类且被所有对象共享。
静态成员用于全局共享或工具类逻辑,非静态成员用于对象的个性化特征。

赞(0)
未经允许不得转载:171主机测评 » c#中关于静态与非静态
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址