C# Static 的使用2

本文详细介绍了在编程中static关键字的三种主要用途:用于变量前表示静态变量、用于方法前表示静态方法、以及用于class前表示静态类。通过具体示例解释了如何在不同场景下使用这些静态特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static意思是静态,可以修饰类、字段、属性、方法

标记为static的就不用创建实例对象调用了,可以通过类名直接点出来

static三种用法:

1.用于变量前,表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值,这个方法称为静态函数

private void s()

{

static int a=1;

a++;

}

方法第一次调用结束后a在内存内值为2;

方法第一次调用结束后a在内存内值为3;

 

2.在方法(函数)前用static修饰,表示此方法为所在类或所在自定义类所有,而不是这个类的实例所有,这个方法称为静态方法:

情况一:非静态方法:

class t

{

t(....(参数,下面同))

{

~~~~(方法内容,下面同)

}

void s(....)

{

~~~~

}

}

当你在其他方法里调用这个类中的方法s,则需先声明这个类的变量如:t sd = new t(....);

再在t里调用方法:sd.s(....);

情况2:静态方法:

class t

{

t(....(参数,下面同))

{

~~~~(方法内容,下面同)

}

static void s(....)

{

~~~~

}

}

当你在其他方法里调用这个类中的方法s,则不用先声明这个类的变量如直接调用方法:t.s(....);

 

3.用于class前,说明此类型无法新建实例,简单点说这个类型的方法全是静态方法,这个类里的非静态方法是不能使用的,这个类型称为静态类.

比如C#控制台操作的Cancle类里面的成员就被标记为静态的,可以直接用Concle.直接点出来使用。

如果没有标记为静态就要通过创建实例对象来调用,比如说动态字符串StringBuilder就要new一个实例来调用

StringBuilder sb =new StringBuilder();

sb.xxx(); //xxx是方法名

 

 

static class t

{

~~~~

}

~~~~

class d

{

~~~~

void f(....)

{

~~~~

t v = new t();//此时程序会出现错误

}

}

<think>好的,我需要回答用户关于C#static关键字的用法、说明和示例的问题。首先,我需要整理现有的引用资料,确保信息准确。 根据引用[1],static可以用于类、方法、成员变量和构造函数。静态成员是全局共享的,比如Math类的方法。引用[2]提到静态方法可以直接通过类名调用,不需要实例。引用[3]和[5]补充了静态构造函数和静态属性的内容,还提到private static变量的访问限制。 接下来,我需要按照用户的要求,结构清晰地分点说明,每个部分都要有示例。比如静态成员变量可以用计数器示例,静态方法则用工具类,静态类如Console,静态构造函数初始化静态变量。 还要注意用户提到的格式要求:行内公式用$...$,独立公式用$$...$$,虽然这里可能用不上太多数学公式,但如果有相关的计算示例也要处理。比如,如果有数学相关的静态方法,可以展示。 然后生成相关问题,需要围绕static的不同用途展开,比如与其他关键字的区别、内存影响、适用场景等。 最后,检查引用是否正确标注,确保每个引用来源对应正确的内容,比如引用[1]关于静态构造函数的部分,引用[5]关于private static的部分。 可能需要注意的地方:确保示例代码正确,比如静态类的示例不能有实例构造函数,静态构造函数没有访问修饰符等。同时,语言要使用中文,避免术语错误。</think>### C#中`static`关键字使用说明 `static`关键字在C#中用于定义**静态成员**、**静态类**、**静态方法**和**静态构造函数**,其核心特性是**不依赖实例化对象**即可使用,且**全局共享唯一实例**。以下是具体说明与示例: --- #### 一、静态成员变量 - **作用**:所有对象共享同一数据。 - **示例**:统计类实例数量 ```csharp public class Counter { public static int Count = 0; // 静态变量 public Counter() { Count++; } } // 使用:Counter.Count 直接访问 ``` --- #### 二、静态方法 - **作用**:无需实例化即可调用,常用于工具类。 - **示例**:数学工具方法 ```csharp public class MathUtils { public static int Add(int a, int b) { return a + b; } } // 调用:MathUtils.Add(3, 5); ``` --- #### 三、静态类 - **规则**: - 仅包含静态成员。 - 不可实例化(无构造函数)。 - **示例**:日志工具类 ```csharp public static class Logger { public static void Log(string message) { Console.WriteLine($"[LOG] {DateTime.Now}: {message}"); } } // 调用:Logger.Log("程序启动"); ``` --- #### 四、静态构造函数 - **作用**:初始化静态成员,仅执行一次。 - **示例**:配置文件加载 ```csharp public class Config { public static string ConnectionString; static Config() { // 静态构造函数 ConnectionString = "Server=localhost;Database=Test"; } } ``` --- #### 五、静态属性 - **作用**:封装静态字段的访问逻辑。 - **示例**:单例模式 ```csharp public class Singleton { private static Singleton _instance; public static Singleton Instance { get { if (_instance == null) { _instance = new Singleton(); } return _instance; } } } ``` --- #### 注意事项 1. **内存管理**:静态成员生命周期与应用程序一致,需避免内存泄漏[^1]。 2. **线程安全**:多线程环境中需对静态变量加锁(如`lock`)[^5]。 3. **访问限制**:`private static`变量仅可在类内部访问[^5]。 --- ### 相关问题 1. `static`与`const`关键字的区别是什么?[^3] 2. 静态类能否实现接口或继承其他类?[^1] 3. 如何通过`static`实现单例模式? 4. 静态构造函数何时会被调用? 5. 静态方法能否访问实例成员变量?[^2] --- : 静态成员全局共享,需注意初始化时机与线程安全。 [^2]: 静态方法直接通过类名调用,无需实例化。 : `private static`变量限制访问范围,增强封装性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值