当前位置:编程学习 > C#/ASP.NET >>

关于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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,