3 回答

TA贡献1853条经验 获得超6个赞
在C#中,委托是一种类型,属于引用类型,委托的关键字是delegate,委托的定义和类的定义一样,所以凡是能定义类的地方也是可以定义委托的,public delegate void MyDelegate();这个定义了一个无返回值,无参的委托类型,那么下面来通过委托编写一段代码:
实例 1 : 委托的基本组成
class Program
{
public delegate void MyDelegate();
static void Main(string[] args)
{
MyDelegate myMessage = new MyDelegate(MyMethod);
myMessage();
Console.ReadLine();
}
public static void MyMethod()
{
Console.WriteLine("我是通过委托调用的");
}
}
上述的代码是可以直接进行运行的,在上述代码中,首先声明了一个委托 MyDelegate, 它是无返回值,无参数的 ,同时还创建了一个方法MyMethod(), 这个方法也是 无返回值,无参数的。
静态方法和实例方法的区别 “静态方法都是通过关键字static来定义的,静态方法不需要实例这个对象就可以通过类名来访问这个对象。在静态方法中不能直接访问类中的非静态成员。而用实例方法则需要通过具体的实例对象来调用,并且可以访问实例对象中的任何成员”, 来通过一个实例来了解
public delegate void MyPersonDelegate(string name);
static void Main(string[] args)
{
MyPersonDelegate personDelegate = new MyPersonDelegate(Person.GetPersonName);
personDelegate("Static");
MyPersonDelegate personIntanceDelegate = new MyPersonDelegate(new PersonIntance().GetPersonName);
personIntanceDelegate("Intance");
}
class Person
{
public static void GetPersonName(string age)
{
Console.WriteLine(age);
}
}
class PersonIntance
{
public void GetPersonName(string name)
{
Console.WriteLine(name);
}
}
在上述代码中,首先定义了一个委托MyPersonDelegate,它是无返回值,并且需要一个string类型的参数类型(在这里说一点,委托是可以进行协变和逆变的,具体请参考.NET可变性解析(协变和逆变)),然后分别定义了两个类person和PersonInstance 其中Person中声明了一个GetPersonNam的静态方法,PersonIntance类中声明了一个GetPersonName的实例方法,在主函数Main中,分别进行调用.在执行的时候,会发现委托的实例后跟一个参数,这个参数其实就是方法的参数,因为所定义的委托要求的是一个执行一个无返回值,有一个string类型的参数的方法

TA贡献1876条经验 获得超7个赞
简单来说你只是声明了委托并搭载了几个方法,根本就没有执行,所以当然不会有结果,简单的调用比如
max = new Max(md.Max); //为啥不显示输出结果呢? max += new Max(md.Min); //为啥不显示输出结果呢? max.Invoke(); //执行所有搭载方法 |
当然也可以更简单比如
max = new Max(md.Max); //为啥不显示输出结果呢? max(); |
- 3 回答
- 0 关注
- 106 浏览
添加回答
举报