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

C#窗体与DLL间Value值重置问题:如何保留CH1.Wavelength的值?

问题分析与解决方案

核心问题所在

你在窗体代码的最后一行犯了一个关键错误:你直接访问了CH1,但这个CH1并不是你通过pub.Wave(longu)修改的那个SayMyName实例里的CH1对象!

看你的窗体代码片段:

textBox2.Text = CH1.Wavelength.ToString();

这里的CH1要么是未定义的(编译器应该会抛出错误),要么是你在窗体类里额外声明的另一个Channels实例——它的Wavelength默认值就是0,所以文本框才会显示0。而真正被Wave方法修改的是pub这个SayMyName实例内部的CH1对象。

修复步骤

1. 修正窗体的访问代码

把最后一行改成直接访问pub实例中的CH1:

textBox2.Text = pub.CH1.Wavelength.ToString();

这样就能获取到被Wave方法修改后的正确值了。

2. 修正Wave方法里的数值写法(重要细节)

你写的CH1.Wavelength = 01064;在C#中有坑:以0开头的整数会被解析为八进制数,01064对应的十进制是564,而不是你预期的1064。如果目标是十进制的1064,务必去掉前面的0:

CH1.Wavelength = 1064;

这也是为什么你断点看到的数值可能和实际运行值不符的原因,得注意这个语法细节。

额外优化建议

为了避免这类字段访问错误,同时提升代码的安全性,建议把类的字段改为属性,并设置合适的访问修饰符:

public class Channels 
{ 
    public int Wavelength { get; set; } = 0; 
}

public class SayMyName 
{ 
    public Channels CH1 { get; private set; } = new Channels(); 
    public void Wave(string longu) 
    { 
        CH1.Wavelength = 1064; 
    } 
}

用属性代替字段,同时给CH1的setter设为private,这样外部只能读取CH1,不能直接修改它的引用,更符合面向对象的封装原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:42:46