当我们在课堂上或在课堂上定义委托时,有什么区别?

时间:2016-03-14 13:08:47

标签: c# delegates

事实上,当我们在课堂上或在课堂上定义委托时,有什么不同?我是初学者,请解释一下。

示例1

namespace Delegate
{
    public delegate int Calculate(int value1, int value2);
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

示例2

class Program
{
    public delegate int Calculate(int value1, int value2);
    static void Main(string[] args)
    {
    }
}

1 个答案:

答案 0 :(得分:2)

  

当我们在课堂上或在课堂上定义委托时,有什么区别   它

当您在类之外定义委托时,并且在其他类中没有定义委托时,它属于它所定义的命名空间。这意味着如果想要使用此委托,它的完整路径将如下所示:

namespace ConsoleApplication1
{
    class Program
    {
        static void H()
        {
            MyDelegate.Calculate y = (x, w) => 1;
        }
    }
}

namespace MyDelegate
{
    public delegate int Calculate(int value1, int value2);
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

相反,如果你要在一个类中公开它,你的路径将包含定义委托的实际类:

namespace ConsoleApplication1
{
    class Program
    {
        static void H()
        {
            MyDelegate.Program.Calculate y = (x, w) => 1;
        }
    }
}

namespace MyDelegate
{   
    class Program
    {
        public delegate int Calculate(int value1, int value2);
        static void Main(string[] args)
        {
        }
    }
}

修改

正如@MatthewWatson在评论中指出的那样,delegate是一个类型,它通常应该在命名空间级别声明,如Action<T>Func<T>在.NET框架中。如果要实现将在类层次结构内部使用的委托,则可以将其放在类中并将其设置为protected。我建议使用上面提到的.NET框架公开的代表,并满足大多数要求。