事实上,当我们在课堂上或在课堂上定义委托时,有什么不同?我是初学者,请解释一下。
示例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)
{
}
}
答案 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框架公开的代表,并满足大多数要求。