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了。如果您希望在类的其他方法中修改这个标志,您需要将这个标志作为类的成员变量。

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

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
        }
    }
}
相关推荐
弈栈录26 分钟前
Java AI 应用的异步化与高并发设计
java·后端·架构
Mr_Mao32 分钟前
告别选型困难!集 VueUse、ahooks、Mantine 于一身:286 个 Hook 的 ReaUse 来了
前端·javascript·react.js
落魄实习生39 分钟前
Agent Scope Java 2.x 系列【2】 ReActAgent
java·开发语言
艸肅1 小时前
Ubuntu 安装 JDK (含手动安装)
java·ubuntu·jdk
m0_734172421 小时前
Python字典计数怎样处理首次出现的键
java
卓怡学长1 小时前
w204基于springbo旅行社签证代理服务系统
java·spring boot·spring·intellij-idea
泡海椒1 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
默_笙2 小时前
🚙 一条腿走路会摔:ES 关键词检索、混合召回与 ReRank 裁判
前端·javascript
Json____2 小时前
家居装修 AI 智能咨询助手:让装修咨询从“大海捞针“变成“一问即答“
java·后端·vue3·it学习·wwwoop.com
YIAN2 小时前
从跨域代理到 WebSocket:梳理前端实时通信的底层逻辑与完整实践
前端·websocket