1.1静态字段
使用static关键字定义能由多个实例共享的数据。
使用:声明静态字段时只需在字段类型前加上static关键字。
例子:
public class ExampleClass
{
public static int Counter = 0; // 静态字段
public ExampleClass()
{
Counter++; // 每次创建实例时增加计数
}
}
如何理解和记忆?
理解静态字段的一个好方法是想象一个黑板(代表类),在这个黑板上写下的任何东西(静态字段)都是对教室里所有的学生(类的实例)可见和共享的。每次有新的学生加入(创建一个新的类实例),这些信息都会对他们可见且相同。
1.2静态方法
静态方法是指使用static关键字声明的方法。它们属于类本身而不是类的任何特定实例,这意味着你可以不创建类的实例就直接调用这些方法。
什么时候使用:1.当一个方法不依赖于类的状态时,可以定义为静态方法;(如何理解:想象一下你有一个工具箱(类),里面有各种工具(方法)。有些工具是用于修理具体的物品(实例状态),而有些工具则是通用的,比如测量长度的尺子,它不依赖于你要修理的具体物品是什么。)2.用于创建类的实例的方法通常被定义为u静态的。
例子:
public static class StringHelper
{
// 静态方法:检查字符串是否为空或null
public static bool IsNullOrEmpty(string str)
{
return string.IsNullOrEmpty(str);
}
// 静态方法:将字符串转换为大写并返回
public static string ToUpperCase(string str)
{
if (IsNullOrEmpty(str))
return null;
return str.ToUpper();
}
}
// 使用StringHelper类中的静态方法
class Program
{
static void Main(string[] args)
{
string testString = "hello world";
bool isEmpty = StringHelper.IsNullOrEmpty(testString);
Console.WriteLine($"Is '{testString}' null or empty? {isEmpty}"); // 输出: Is 'hello world' null or empty? False
string upperCaseString = StringHelper.ToUpperCase(testString);
Console.WriteLine($"Uppercase: {upperCaseString}"); // 输出: Uppercase: HELLO WORLD
}
}
1.3静态构造函数
静态构造函数用于将类中的静态数据初始化成特定值。
特点:只在类第一次被使用时自动调用一次并且不显式调用。
不允许任何参数。
静态构造函数不使用public、private等访问修饰符。
最好在声明时进行静态字段的初始化,而不是静态构造函数。或者以内联方式初始化静态字段也可以。
例子:
public class AppConfig
{
public static string DatabaseConnectionString;
public static string ApiKey;
// 静态构造函数,用于初始化静态成员
static AppConfig()
{
// 假设从配置文件或其他地方读取配置信息
DatabaseConnectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
ApiKey = "your_api_key_here";
}
// 提供方法获取配置信息
public static void PrintConfigurations()
{
Console.WriteLine($"Database Connection String: {DatabaseConnectionString}");
Console.WriteLine($"API Key: {ApiKey}");
}
}
// 使用AppConfig类
class Program
{
static void Main(string[] args)
{
// 第一次访问静态成员,静态构造函数会被调用
AppConfig.PrintConfigurations();
}
}
1.4静态属性
态属性通常用于表示那些对所有类实例都相同的值,或者用于管理整个类的状态。
静态属性通过在属性声明前加上static关键字来定义。静态属性可以有get和set访问器,分别用于获取和设置属性的值。
例子:
public class ClassName
{
// 定义一个静态字段(可选)
private static int staticField;
// 定义一个静态属性
public static int StaticProperty
{
get { return staticField; }
set { staticField = value; }
}
}
// 使用ClassName类
class Program
{
static void Main(string[] args)
{
// 设置静态属性的值
ClassName.StaticProperty = 10;
Console.WriteLine($"StaticProperty: {ClassName.StaticProperty}"); // 输出: StaticProperty: 10
// 修改静态属性的值
ClassName.StaticProperty = 20;
Console.WriteLine($"StaticProperty: {ClassName.StaticProperty}"); // 输出: StaticProperty: 20
}
}
public static int StaticProperty { get; set; } 是静态属性,提供对静态字段的访问和修改接口。
1.5静态类
当类不包含任何实例字段(或方法)时,用static关键字修饰该类。
作用:(1)防止程序员写代码来实例化类;(2)防止在类的内部声明任何实例字段或方法。
静态类不能被实例化,也不能包含实例成员(即非静态成员)。这意味着你不能使用new
关键字创建静态类的对象。
静态类只能包含静态成员(静态字段、静态方法、静态属性等),不允许有实例成员。
静态类默认是密封的(sealed),不能被继承。
例子:静态类通过在类声明前加上static关键字来定义。
public static class MathHelper
{
// 定义一个静态字段
public static double Pi = 3.14159;
// 定义一个静态方法
public static double CalculateCircleArea(double radius)
{
return Pi * radius * radius;
}
// 定义一个静态属性
public static int MaxValue
{
get { return 100; }
}
}