- 天真
- 目前解決方法
天真
using System;namespace forCode20191 {class Program {static void Main(string[] args) {bool flag = false;Tmp tt = new Tmp(out flag);Console.WriteLine(flag); // 將輸出 falsett.Doit();Console.WriteLine(flag); // 將輸出 trueConsole.ReadKey();}}class Tmp {public bool Flag { get; private set; } // 將flag作為公共屬性,只能通過類內部setpublic 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
類的成員變量,可以在類的任何方法中訪問和修改:
using System;namespace forCode20191 {class Program {static void Main(string[] args) {Tmp tt = new Tmp();Console.WriteLine(tt.Flag); // 輸出 false,因為Flag在構造時被設置為falsett.Doit();Console.WriteLine(tt.Flag); // 輸出 true,因為Doit方法將Flag設置為trueConsole.ReadKey();}}class Tmp {public bool Flag { get; private set; } // 將flag作為只讀公共屬性public Tmp() {Flag = false; // 初始化Flag為false}public void Doit() {Flag = true; // 在Doit方法中將Flag設置為true}}
}