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
相关产品推荐
相关产品推荐

