con*_*att 12 .net c# delegates
我真的在这里搞砸了.
我想知道为什么我不能在方法中声明委托类型,而是我必须在类级别执行它.
namespace delegate_learning
{
class Program
{
// Works fine
public delegate void anon_delgate(int i);
static void Main(string[] args)
{
HaveFun();
Console.Read();
}
public static void HaveFun()
{
// Throws an error :/
//delegate void anon_delgate(int i);
anon_delgate ad = delegate(int i) { Console.WriteLine(i.ToString());};
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑: 我正在研究Lambda表达式,并根据我自己的个人知识对Lambdas之前的表达进行备份.
Naw*_*waz 18
// Throws an error :/
delegate void anon_delgate(int i);
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误,因为它是一个类型定义,而不是一个变量声明.在方法内部不允许任何类型定义.它只允许在类范围或命名空间范围内.
namespace A
{
delegate void X(int i); //allowed
public class B
{
delegate void Y(int i); //also allowed
}
}
Run Code Online (Sandbox Code Playgroud)
顺便问一下,你为什么不写这个:
anon_delgate ad = i => Console.WriteLine(i.ToString());
Run Code Online (Sandbox Code Playgroud)
它被称为lambda表达式.
Eri*_*ert 12
您不能在方法中声明任何类型.那么让我们考虑一个问题"为什么我不能在C#中的方法中声明一个类型?"
这种形式的问题的答案总是一样的.为了使您能够在C#中执行某些操作,必须执行以下操作:
到目前为止,该列表中的内容只发生了第一个.其余的都没有发生过,所以你不能在C#中使用这个功能.
您似乎暗示功能的默认状态是"已实现",并且我们必须提出一些使其未实现的原因.我向你保证,情况并非如此; 所有可能功能的默认状态是"未实现",我们必须有理由花费时间,金钱和精力来实现功能.到目前为止,没有人提出一个令人信服的案例,即本地类型声明是值得的; 如果你想尝试做出令人信服的案例,我很乐意听到.