2

我认为委托字段就像其他字段一样,在类被实例化之前我不能使用它们。然而:

 class Program
    {

        delegate void lol (int A);
         string myX;

        static void Main(string[] args)
        {
            lol x = ... //works     

            myX //does not exist, 
        }
    }
4

2 回答 2

6
delegate void lol (int A);

委托不是一个字段,它是“嵌套类型”,因此您可以像使用任何其他类型一样使用它。

并且在myX内部引用Main是非法的,因为myX是实例字段。您需要使用 instance.myX 在静态方法(Main() here)中使用它

要更清楚,请尝试以下操作,您会意识到自己做错了什么

class Program
{
    delegate void lol (int A);
     string myX;
     lol l; 

    static void Main(string[] args)
    {
        l = null; //does not exist
        myX //does not exist, 
    }
}
于 2013-10-14T14:59:10.973 回答
-1

委托实例是引用一个或多个目标方法的对象。

大声笑 x = ...这将创建代表实例

class Program
{

    delegate void lol (int A);
     string myX;

    static void Main(string[] args)
    {
        lol x = ... // THIS WILL CREATE DELEGATE INSTANCE
        x(3) // THIS WILL INVOKE THE DELEGATE

        myX //does not exist, 
    }
}

我从 MSDN 为您复制的另一个重要代表语法

    // Original delegate syntax required  
    // initialization with a named method.
    TestDelegate testDelA = new TestDelegate(M);

    // C# 2.0: A delegate can be initialized with 
    // inline code, called an "anonymous method." This
    // method takes a string as an input parameter.
    TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };

    // C# 3.0. A delegate can be initialized with 
    // a lambda expression. The lambda also takes a string 
    // as an input parameter (x). The type of x is inferred by the compiler.
    TestDelegate testDelC = (x) => { Console.WriteLine(x); };
于 2013-10-14T15:17:34.710 回答