C# static:静态成员,小白也能看懂

简单来说,static 就是"**静态"**的意思,被它修饰的成员,不属于某一个具体对象,而是属于整个类。

比如我们创建一个学生类:

cs 复制代码
class Student
{
    public string name;
}

如果创建两个学生:

cs 复制代码
Student s1 = new Student();
Student s2 = new Student();

那么 "s1" 和**"s2"** 都有自己独立的**"name"**。这就是普通成员。

但是如果加上**"static":**

cs 复制代码
class Student
{
    public static string school = "XX大学";
}

这时候**"school"** 就是静态成员。它不属于某一个学生,而是属于 "Student" 这个类。使用的时候也不需要 **"new"**对象,可以直接这样写:

cs 复制代码
Console.WriteLine(Student.school);

这就是 static最重要的特点:类直接使用,不再需要创建对象。

静态成员还有一个特点,就是大家共享同一份数据。比如有100个学生对象,但**"Student.school"** 只有一份。修改了它,所有地方看到的都是修改后的结果。

除了静态变量,还可以定义静态方法:

cs 复制代码
class Test
{
    public static void SayHello()
    {
        Console.WriteLine("你好!");
    }
}

调用时直接:

cs 复制代码
Test.SayHello();

同样不需要 "new Test()"。

不过要注意,静态方法不能直接访问普通成员,因为普通成员属于对象,而静态方法没有指定到底是哪一个对象。

平时我们也经常接触 static ,比如程序的入口方法:

cs 复制代码
static void Main()
{
}

这里的 "Main" 就是静态方法。

总的来说,可以把 "static" 简单理解成:这个东西不是某一个对象独有的,而是整个类共同使用的。刚开始学习的时候不用想得太复杂,记住**"类直接调用、不需要 new、大家共享"** 这几个特点,基本就能理解static了。

相关推荐
寂寞的船28 分钟前
【Unity知识速递】第13期 Unity 内存泄漏排查实战:从 Memory Profiler 到 Lua 引用泄漏的生产级全链路诊断
unity·junit·c#·游戏引擎·lua
Funlang1 小时前
龙芯上的 Fun:从跑起来到机器码
开发语言·龙芯
总要学点什么1 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
旖旎夜光2 小时前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
ShineWinsu2 小时前
对于Qt:QTabWidget常见属性的解析
开发语言·数据库·c++·qt·浏览器·qtabwidget·标签页
普通人63 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
꧁细听勿语情꧂3 小时前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
SomeOtherTime3 小时前
Rust集合(AI回答)
开发语言·后端·rust
曦樂~3 小时前
【Web Development】03JavaScript 基础和事件
开发语言·前端·javascript
郝学胜-神的一滴3 小时前
LangChain Skill 实现(渐进披露 On-Demand Skill,LangChain 官方 Deep Agent Skill 模式)
开发语言·python·langchain·numpy