网站建设怎么翻译,虾子酱 wordpress,东莞高风险地区名单最新,国内免费注册二级域名的网站目录
一、什么是静态的#xff1f;什么是常量#xff1f;
1. 静态#xff08;Static#xff09;
2. 常量#xff08;const#xff09;
二、类中的静态成员有什么用#xff1f;
1. 共享数据
2. 工具方法与全局配置
3. 单例模式
三、静态类和静态成…目录
一、什么是静态的什么是常量
1. 静态Static
2. 常量const
二、类中的静态成员有什么用
1. 共享数据
2. 工具方法与全局配置
3. 单例模式
三、静态类和静态成员方法的介绍
1. 静态类Static Class
2. 静态构造函数Static Constructor
3. 静态方法的限制
四、对比总结
1. 静态成员 vs 常量const
2. 静态类 vs 普通类
3. 使用场景
注意事项 前言代码中的“共享经济”与“不变法则” 有没有想过如何让一个类的所有实例共享同一份数据或者怎样创建一种无需实例化就能调用的“工具包”方法 在C#的世界里静态成员就像魔法般的全局变量而常量则是刻在代码石碑上的永恒法则。它们一个灵活善变但需谨慎一个坚守初心绝不妥协。 本文将揭秘静态类的“禁欲系”设计、静态构造函数的幕后初始化大法并带你理清静态成员与常量的爱恨纠葛——从此告别重复代码让你的程序优雅如诗 一、什么是静态的什么是常量
1. 静态Static 静态是C#中用于描述类级别成员的关键字。静态成员如静态字段、方法、属性属于类本身而非类的实例所有实例共享同一份静态成员。
内存分配静态成员在程序启动时分配内存生命周期与应用程序一致。访问方式直接通过类名访问无需实例化对象。 记住 程序是不能无中生有的 我们要使用的对象 变量 函数 都是要在内存中分配空间的 之所以要实例化对象 目的就是要分配内存空间在程序中 产生一个抽象的对象 静态成员的特点 程序开始运行时 就会分配内存空间 所以我们可以直接使用 静态成员和程序同生共死 只要使用了他 直到程序结束时 内存空间才会被释放 所以每个静态成员都有属于自己的唯一一个小房间 这让静态成员便有了唯一性 在任何地方使用 都是使用小房间里面的内容 修改的也是房间里面的内容 2. 常量const 常量是通过const关键字定义的不可修改的编译时常量。
内存分配值在编译时确定并嵌入到IL代码中。不可变性必须在声明时赋值且只能为基本类型如int, string或null。
// 静态字段 vs 常量
public class Config {public static string Environment Production; // 静态字段可修改public const int MaxRetryCount 3; // 常量不可修改
} const 常量可以理解为特殊的静态static 相同点 他们都可以通过类名点出使用 不同点 1.const 必须初始化不能修改 static 没有这个限制 2.const 只能修饰变量static可以修饰很多 3.const一定是写在访问修饰符后面的static没有这个要求 二、类中的静态成员有什么用
1. 共享数据 静态成员用于存储所有实例共享的数据。例如统计类的实例总数
public class User {public static int UserCount 0; // 所有实例共享public User() {UserCount;}
}Console.WriteLine(User.UserCount); // 直接通过类访问
2. 工具方法与全局配置 将无需实例化的工具方法或全局配置定义为静态成员
public class MathUtils {public static double PI 3.1415926;public static int Add(int a, int b) a b;
}
Console.WriteLine(MathUtils.Add(2, 3)); // 直接调用静态方法
3. 单例模式 通过静态成员实现单例确保类只有一个实例
public class Singleton {private static Singleton _instance;public static Singleton Instance _instance ?? new Singleton();private Singleton() { }
}
三、静态类和静态成员方法的介绍
1. 静态类Static Class
定义用static修饰的类不能实例化只能包含静态成员。用途封装工具类或扩展方法容器。
public static class StringExtensions {public static string ToTitleCase(this string input) {return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input);}
}string name john doe;
Console.WriteLine(name.ToTitleCase()); // 输出 John Doe
注意直接类名然后点出来使用 里面的方法
2. 静态构造函数Static Constructor
作用初始化静态字段或执行一次性的静态初始化逻辑。调用时机在类首次被访问如创建实例、调用静态方法时自动执行。
注这里的创造实例是指的是点出内部已经给你创造好的实例。你自己是无法new的。 看如下代码
public class Singleton {// 静态成员管理唯一实例private static Singleton _instance;public static Singleton Instance _instance ?? new Singleton();// 私有构造函数禁止外部 newprivate Singleton() { }
}// 正确通过静态属性访问唯一实例
var instance Singleton.Instance;
这份代码是静态构造函数的一个实际应用 这段代码定义了一个 Logger 类其核心功能是初始化日志文件的存储目录。通过静态成员和静态构造函数的设计确保日志目录在程序运行期间只创建一次且无需手动初始化。
public class Logger {public static string LogDirectory;static Logger() {LogDirectory Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Logs);Directory.CreateDirectory(LogDirectory);}
}
注意这个主要是用来初始化做一些配置什么的
3. 静态方法的限制
不能访问实例成员非静态字段、方法只能访问其他静态成员。不能使用this关键字。
四、对比总结
1. 静态成员 vs 常量const
特性静态成员常量const内存分配运行时分配编译时嵌入到IL代码可修改性可修改除非是readonly不可修改类型限制无限制仅支持基本类型或null初始化时机静态构造函数或声明时必须在声明时赋值
2. 静态类 vs 普通类
特性静态类普通类实例化不可实例化可以实例化成员类型仅包含静态成员可包含静态和实例成员继承不能继承或被继承支持继承
3. 使用场景
静态成员共享数据、工具方法、全局配置。静态类工具类、扩展方法容器、单例模式。常量固定不变的值如数学常数、配置标志。 注意事项 避免过度使用静态成员可能导致代码耦合度高、难以测试。线程安全问题静态成员在多线程环境下需加锁如lock。常量的限制无法在运行时动态赋值如从配置文件读取。静态构造函数的性能避免在静态构造函数中执行耗时操作。 通过合理使用静态成员和常量可以显著提升代码的模块化和执行效率但需谨慎平衡其适用场景