【发布时间】:2017-07-19 21:08:22
【问题描述】:
为什么 MyDeler 是“静态的”,因为我可以通过类名访问 MyDeler,但我不能明确地说公共“静态”委托 void MyDeler(),也不能通过 MyClass 的实例访问 d,如在新的 MyClass.d() 中?
此外,为什么我必须新建一个 MyClass 才能使用 MyVoidAction?
见下面的代码:
using System;
public class MyClass
{
public delegate void MyDeler();
public Action MyVoidAction;
}
class MainClass
{
static void Main()
{
MyClass.MyDeler d = () => Console.WriteLine("my deler");
d();
// MyClass.MyVoidAction mva1 = () => Console.WriteLine("my void action"); // not allowed, why?
MyClass meClass = new MyClass();
meClass.MyVoidAction = () => Console.WriteLine("my void action");
meClass.MyVoidAction();
}
}
我查了这个答案:Accessibility between Action and Delegate
这清楚了很多,但我不确定我是否 100% 了解这一点。所以根据那个答案,委托 void MyDeler() 定义了一个类型,这让我感到困惑,因为我想象这样的事情:
using System;
class MainClass
{
class MyClass
{
public static class DelegateClass
{
public void DoDel() // isn't even legal?
{
Console.WriteLine("DoDel()");
}
}
}
static void Main()
{
//MyClass.DelegateClass d = new asdf // ??? something like this?
}
}
帮助表示赞赏!
【问题讨论】: