You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Circle类static字段radius1重置为0,求保持值不变的解决方案

解决Circle类static字段radius1自动重置为0的问题

首先先澄清一个关键点:C#里的static字段是属于类本身的,它的生命周期和你的应用程序进程一致,不会因为创建类的实例或者“调用类”就自动重置为0。你遇到的问题要么是没给它赋过有效值,要么是代码里其他逻辑不小心把它改回0了。下面给你几个靠谱的修改方案:

方案1:用静态构造函数初始化

静态构造函数会在类第一次被访问时执行仅一次,能保证radius1被初始化后不会被自动重置(除非你主动修改):

public class Circle : Shape 
{
    public static double radius1;

    // 静态构造函数:整个程序运行期间只执行一次
    static Circle()
    {
        // 这里设置你需要的初始值,比如3.5
        radius1 = 3.5;
    }

    public Circle(double radius)
    {
        // 实例构造函数的业务逻辑,比如给实例字段赋值(如果有的话)
    }

    // 你的其他方法...
}

方案2:直接在声明时初始化

如果初始值是固定的,可以直接在定义static字段的时候赋值,程序启动后这个值会一直保留(除非主动修改):

public class Circle : Shape 
{
    // 直接初始化静态字段,避免默认的0值
    public static double radius1 = 5.0;

    public Circle(double radius)
    {
        // 实例构造函数逻辑
    }
}

方案3:封装成可控的静态属性(推荐)

如果需要在运行时动态设置,同时防止被意外修改,可以把字段封装成属性,用静态方法控制赋值逻辑:

public class Circle : Shape 
{
    // 私有静态字段,外部不能直接修改
    private static double _radius1;

    // 公开只读属性,外部只能获取值,不能直接修改
    public static double Radius1 => _radius1;

    // 静态方法用来设置值,还能加验证逻辑确保合法性
    public static void SetRadius1(double value)
    {
        if (value > 0) // 确保半径是正数
        {
            _radius1 = value;
        }
        else
        {
            throw new ArgumentException("Radius must be a positive number.");
        }
    }

    // 静态构造函数设置默认值
    static Circle()
    {
        _radius1 = 2.0;
    }

    public Circle(double radius)
    {
        // 实例构造函数逻辑
    }
}

额外排查技巧

如果还是出现值被重置为0的情况,你可以:

  • 右键点击radius1字段,选择「查找所有引用」,检查有没有其他代码把它设为0;
  • 给字段添加断点,当值被修改时触发,追踪到底是哪段代码修改了它。

内容的提问来源于stack exchange,提问作者jjmart92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:17:13