如何使用初始化语法在新语句中使用类字段

时间:2018-03-17 17:37:15

标签: c#

我有一个我想要实例化的课程。它包含两个字段,一个是String,另一个是Action。

在动作声明中,我想在我的班级中使用字符串字段。但是,我不知道如何在实例化时直接调用它。有什么办法,或者我是否必须创建一个字段来包含实例化的类,然后调用文本?

public class ExampleClass
{
    public string text;
    public Action action;
    // on class instantiate -> action.Invoke();
}

public class Program
{
    static void Main(string[] args)
    {
        new ExampleClass
        {
            text = "Hello",
            action = () => { 
                 /* use the text element we specified to do something -> 
                    e.g Console.WriteLine(text); */ },
        };
        Console.ReadLine();
    }
}

尝试仅使用text字段(如action => ()=> {Console.WriteLine(text);})会导致错误:

  

CS0103名称'文字'在当前上下文中不存在

1 个答案:

答案 0 :(得分:3)

你不能。问题是,这实际上是一个封闭。您无法以这种方式访问​​您正在创建的实例的this,因此您需要"关闭"超过它。

您有权访问的this实际上是您正在编写代码的类。在这种情况下,您没有,因为您处于静态函数中反正。

using System;

public class ExampleClass
{
    public string text;
    public Action action;
}


public class Program
{
    public static void Main()
    {
        var instance = new ExampleClass
        {
            text = "Hello"
        };
        instance.action = () => Console.WriteLine(instance.text);
        instance.action();
    }
}