在将方法名称分配给委托类型时,我不能在我的方法名称后面添加括号的原因是什么。
这是代码:
public delegate Simple Simple(); //Create a delegate that returns its own type.
class Program
{
public class Exercise
{
public static Simple Welcome()
{
Console.WriteLine("Welcome!");
return null;
}
}
static void Main(string[] args)
{
Simple msg;
msg = Exercise.Welcome(); //Since Welcome returns Simple, I can execute it.
msg();
Console.Read();
}
}
答案 0 :(得分:13)
它允许编译器将方法调用与对方法组的引用区分开来。如果添加括号,编译器将调用该方法并使用该方法调用的返回值,而不是方法组本身。
答案 1 :(得分:4)
因为()
执行该方法。就像你自己说的那样,你要分配它,而不是执行它。如果您在指定的位置使用了括号,则表示您将分配执行方法的结果,而不是指定方法。
答案 2 :(得分:4)
考虑以下代码:
delegate Foo Foo(); // yes, this is legal - a delegate to method that returns
// the same kind of delegate (possibly to a different method,
// or null)
class Program
{
static Foo GetFoo() { return null; }
static void Main()
{
Foo foo;
foo = GetFoo; // assign a delegate for method GetFoo to foo
foo = GetFoo(); // assign a delegate returned from an invocation
// of GetFoo() to foo
}
}
希望它清楚地表明为什么括号必须是重要的。