实例化类时如何在Action初始化中调用类的String字段?
嘿,这个问题其实挺典型的,咱们直接说可行的解决办法——不用先存好实例再去设置action,直接在构造函数里就能搞定!
核心思路:利用构造函数初始化Action
在C#里,构造函数执行的时候,当前实例已经处于创建过程中,this引用是有效的,所以你可以直接在构造函数里给action赋值,让它捕获当前实例的text字段。这样action在后续调用时,就能直接访问到这个实例的text值(哪怕后续text被修改,也会取最新的值)。
代码示例:
public class ExampleClass { public string text; public Action action; // 构造函数:初始化text和action public ExampleClass(string initialText) { text = initialText; // 这里直接引用text字段(加this更清晰,也可以省略) action = () => { // 这里可以任意使用text字段,比如打印内容 Console.WriteLine($"当前text的内容是:{text}"); }; // 如果想在实例化完成后自动调用action,直接加这行 action.Invoke(); } }
为什么字段初始化器不行?
如果你尝试直接在字段定义时初始化action,比如下面这种写法:
// ❌ 编译报错!字段初始化阶段无法访问实例成员 public Action action = () => Console.WriteLine(text);
这会编译失败,因为字段初始化器是在构造函数执行之前运行的,此时实例还没完全创建,无法访问text这类实例字段,所以必须放到构造函数里处理。
使用验证
你可以这样测试效果:
// 创建实例,此时构造函数里会自动调用action,输出初始text var myExample = new ExampleClass("我是初始文本"); // 修改text后再调用action myExample.text = "我被修改啦!"; myExample.action.Invoke(); // 输出修改后的内容
这样就完美实现了在初始化action时直接使用类的text字段的需求,不需要额外先存储实例再设置action~
内容的提问来源于stack exchange,提问作者Kontorted
相关产品推荐
相关产品推荐

