在C#中访问Getter返回值并在Setter中存储的问题
解决FixtureReport类无法访问ReceiverType值的问题
你的代码里有两个核心问题导致无法在其他方法中使用ReceiverType值:
- 在
setReceiverType方法里重新实例化了fixtureController,这会创建一个全新的控制器实例,无法拿到原本依赖全局配置的正确结果 - 没有把ReceiverType值存在
fixtureReport的类成员变量里,方法内的局部变量只能在当前方法里用,其他方法根本看不到
修正方案
步骤1:给FixtureReport添加类成员变量
在fixtureReport里定义一个私有成员,用来保存ReceiverType的值,这样整个类的方法都能访问到它。
步骤2:修改setReceiverType方法逻辑
不要重新new控制器实例(如果需要用控制器的getReceiverType结果,应该用已经初始化好的那个实例,比如通过构造函数传进来),直接把接口参数的值赋值给类成员变量。
修正后的完整代码
接口(规范命名,符合C#编码习惯)
public interface FixtureView{ void SetReceiverType(bool receiver); }
FixtureController类
public class FixtureController : FixtureView { // 全局配置变量,getReceiverType需要用到 private scConfig _config; // 获取Receiver类型的方法 public bool GetReceiverType(){ int receiver = GetValue(); // 简化判断逻辑:不是nanoReceiver就返回true return receiver != nanoReceiver; } // 实现接口的SetReceiverType方法(如果控制器需要处理这个值的话) public void SetReceiverType(bool receiver){ // 这里可以加控制器侧的处理逻辑,比如更新配置等 } // 假设这是获取配置值的方法 private int GetValue(){ // 返回全局配置里的接收器值 return _config.ReceiverValue; } }
FixtureReport类
public partial class FixtureReport : FixtureView{ // 类成员变量:保存接收器类型状态 private bool _isValidReceiver; public void SetReceiverType(bool receiver){ // 把传入的值存到类成员变量里 _isValidReceiver = receiver; // 如果你是需要调用控制器的GetReceiverType方法,不要new新实例,用已有的: // 比如构造函数注入控制器: // private readonly FixtureController _controller; // public FixtureReport(FixtureController controller) { _controller = controller; } // 然后在这里赋值:_isValidReceiver = _controller.GetReceiverType(); } // 示例:在其他方法中使用这个值来禁用功能 public void ToggleFeature(){ // 根据接收器类型判断是否禁用功能 if(!_isValidReceiver){ // 这里写禁用功能的逻辑,比如: // someButton.Enabled = false; // someFeature.Visible = false; } } }
调用流程示例
在控制器里拿到Receiver类型后,传递给报表类:
// 初始化控制器(已经加载好全局配置) var controller = new FixtureController(); // 初始化报表 var report = new FixtureReport(); // 获取接收器类型 bool receiverStatus = controller.GetReceiverType(); // 传递给报表 report.SetReceiverType(receiverStatus); // 之后报表的其他方法就能用这个值了 report.ToggleFeature();
内容的提问来源于stack exchange,提问作者user21228079
相关产品推荐
相关产品推荐

