天真
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
}
}
}