猿问

如下所示,c#利用委托调用类中的非静态方法怎样才能让方法中的内容输出?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 委托和多播委托
{
class Program
{
public delegate void Max();
public delegate double Max1(double x, double y);

public class IntMax
{
public void Max()
{
Console.WriteLine("我是最大值");
}
public double Max(double x, double y)
{
return x > y ? x : y;
}
public void Min()
{
Console.WriteLine("我是最小值");
}
}
static void Main(string[] args)
{
Max max;
Max1 max1;
IntMax md = new IntMax();
max = new Max(md.Max);//为啥不显示输出结果呢?
max += new Max(md.Min);//为啥不显示输出结果呢?

IntMax mx = new IntMax();
max1 = mx.Max;
Console.WriteLine("最大值是:" + max1(5.2,5.7));
Console.ReadKey();
//委托的实例化:意味着要引用某个类中的方法,要实例化,就要调用该委托的构造函数,
//构造函数意味着要将委托的关联的方法作为参数传递;如上所示
}
}
}
新手求解



梦里花落0921
浏览 107回答 3
3回答

墨色风雨

在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类型的参数的方法

幕布斯6054654

简单来说你只是声明了委托并搭载了几个方法,根本就没有执行,所以当然不会有结果,简单的调用比如max = new Max(md.Max);//为啥不显示输出结果呢?max += new Max(md.Min);//为啥不显示输出结果呢? max.Invoke();//执行所有搭载方法当然也可以更简单比如max = new Max(md.Max);//为啥不显示输出结果呢?max();

波斯汪

你把委托、普通类、事件混淆了,普通委托一般不用+=形式的,还有你的各种名称可以改进下,一看都是max,仔细看才知道有大小写等等区别。
随时随地看视频慕课网APP
我要回答