爲什麼MyDeler是「靜態」的,就像我可以通過類名訪問MyDeler一樣,但我無法明確地說public「static」delegate void MyDeler(),我也無法訪問d通過MyClass的實例,就像在新的MyClass.d()中一樣?Action與代理實例化和可訪問性之間的區別
此外,爲什麼我需要新建一個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%這一點。因此,根據該答覆,委託無效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?
}
}
幫助讚賞!
啊,真的逗我的大腦。我以前不熟悉嵌套類。 – reincarnationofstackexchange