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

在C#中访问Getter返回值并在Setter中存储的问题

解决FixtureReport类无法访问ReceiverType值的问题

你的代码里有两个核心问题导致无法在其他方法中使用ReceiverType值:

  1. 在setReceiverType方法里重新实例化了fixtureController,这会创建一个全新的控制器实例,无法拿到原本依赖全局配置的正确结果
  2. 没有把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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:27:51