关于C#委托的奇怪问题。
最近在研究委托,有个问题一直在困扰着我 望有高人 帮我解惑啊。public delegate void GreetingDelegate(string name);
class Program
{
static void Main(string[] args)
{
GreetingManager gm = new GreetingManager();
gm.delegate1 += EnglishGreeting;
gm.delegate1 += ChineseGreeting;
gm.GreetPeople("ddd",gm.delegate1);
Console.ReadKey();
}
public static void EnglishGreeting(string name)
{
Console.WriteLine("Morning, " + name);
}
public static void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
}
public class GreetingManager
{
public GreetingDelegate delegate1;
public void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
}
以上是一个简单的委托的使用例子, 问题就是出现在GreetingManager中,我只声明了一个委托delegate1,但我并没有实例化它也没有给它赋值,但是我在Main方法中实例化了GreetingManager类后,直接gm.delegate1 += EnglishGreeting;这么写 程序并没有报错,理论上,第一次应该用的是“=”,是赋值;第二次,用的是“+=”,是绑定。即是说 gm.delegate1= EnglishGreeting;gm.delegate1 += ChineseGreeting;这样写是正确的。但是我两次全用+=程序也是可以运行的,但是如果我把委托的定义写到同一个类下,其他代码都不变,即是 GreetingDelegate delegate1; delegate1 += EnglishGreeting;delegate1 += ChineseGreeting;这时程序会报“使用了未赋值的局部变量”的编译错误,我不明白为什么。委托和类 我理解上 是差不多的 ,如把委托换成类 ,这个做的话,肯定会报错。 C#委托 --------------------编程问答-------------------- "但是如果我把委托的定义写到同一个类下,其他代码都不变"
把这段你报错的全部代码发上来。 --------------------编程问答-------------------- 那个是运算符重载,不是你想象中的加法运算。
委托里面的+=运算符,等价于Delegate.Combine方法的调用,这个方法是静态的,且参数个数不限,因此即使全部传null都是正常的。 --------------------编程问答-------------------- 是不是理解的问题。
new 一个对象,是创建的类对象。
而委托的赋值,其实是有两种方法的,分别如下:
public delegate void Func(int count);
public class Test
{
public static method(int cc);
}
// 标准赋值语句
Func ob = new Func(Test.method);
// 简洁语法
Func ob1 = Test.method;
补充:.NET技术 , C#