C# 构造函数依赖注入 使用out向外传递参数

天真

csharp 复制代码
using System;

namespace forCode20191 {
    class Program {
        static void Main(string[] args) {
            bool flag = false;
            Tmp tt = new Tmp(out flag);
            Console.WriteLine(flag); // 将输出 false
            tt.Doit();
            Console.WriteLine(flag); // 将输出 true
            Console.ReadKey();
        }
    }

    class Tmp {
        public bool Flag { get; private set; } // 将flag作为公共属性,只能通过类内部set

        public Tmp(out bool flag) {
            Flag = false; // 初始化成员变量
            flag = Flag; // 将成员变量的值赋给out参数
        }

        public void Doit() {
            Flag = true; // 修改成员变量的值
        }
    }
}

目前解决方法

C#中,out参数是在方法调用时才创建的,它的作用域仅限于方法调用的上下文。这意味着,一旦构造函数Tmp执行完毕,out参数flag就不再存在了。因此,您不能在Tmp类的其他方法中访问这个flag变量。

在构造函数中,您可以将flag设置为某个值,但是一旦构造函数执行完毕,您就无法再修改这个flag了。如果您希望在类的其他方法中修改这个标志,您需要将这个标志作为类的成员变量。

下面是修改后的代码,其中flagTmp类的成员变量,可以在类的任何方法中访问和修改:

csharp 复制代码
using System;

namespace forCode20191 {
    class Program {
        static void Main(string[] args) {
            Tmp tt = new Tmp();
            Console.WriteLine(tt.Flag); // 输出 false,因为Flag在构造时被设置为false
            tt.Doit();
            Console.WriteLine(tt.Flag); // 输出 true,因为Doit方法将Flag设置为true
            Console.ReadKey();
        }
    }

    class Tmp {
        public bool Flag { get; private set; } // 将flag作为只读公共属性

        public Tmp() {
            Flag = false; // 初始化Flag为false
        }

        public void Doit() {
            Flag = true; // 在Doit方法中将Flag设置为true
        }
    }
}
相关推荐
寻星探路3 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
崔庆才丨静觅5 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
曹牧5 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
passerby60616 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了6 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅6 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅6 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法6 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
懒人咖6 小时前
缺料分析时携带用料清单的二开字段
c#·金蝶云星空