namespace ConsoleApplication1
{
public delegate void GreetingDelegate(string name);
class Program
{
public void EnglishGreeting(string name)
{
Console.WriteLine("Good Moring "+name);
}
public void ChineseGreeting(string name)
{
Console.WriteLine("早上好" + name);
}
private static void GreetingPeople(string name, GreetingDelegate MakeGreet)
{
MakeGreet(name);
}
static void Main(string[] args)
{
GreetingPeople("Jimmy", EnglishGreeting);
GreetingPeople("张三", ChineseGreeting);
Console.ReadKey();
}
}
}比如EnglishGreeting和ChineseGreeting就会报错,一定要用static来声明,为什么呢?
{
public delegate void GreetingDelegate(string name);
class Program
{
public void EnglishGreeting(string name)
{
Console.WriteLine("Good Moring "+name);
}
public void ChineseGreeting(string name)
{
Console.WriteLine("早上好" + name);
}
private static void GreetingPeople(string name, GreetingDelegate MakeGreet)
{
MakeGreet(name);
}
static void Main(string[] args)
{
GreetingPeople("Jimmy", new Program
().EnglishGreeting);
GreetingPeople("张三", new Program
().ChineseGreeting);
Console.ReadKey();
}
}
}
{
GreetingPeople("Jimmy", EnglishGreeting);
GreetingPeople("张三", ChineseGreeting);
Console.ReadKey();
}你写的这两个方法根本没有办法编译,更不可能运行了!按照语法,对于这个static方法Main中的这两个没有对象标识的EnglishGreeting和ChineseGreeting,编译器就去找当前类型中的static方法了。因为语法就是这样要求的。如果你要调用某个对象的方法,那么你写的代码就应该告诉编译器它们来自于哪一个对象。