C# 静态成员 详解

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; }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值