委托 - 委托返回类型是否必须与它委派的方法相匹配?

Dav*_*ave 5 c# delegates

我除了这似乎是一个显而易见的问题,但委托返回类型是否必须匹配它委托的方法的返回类型?

EG,像这样:

public static void Save()
    {
        TS ts = new TS(SaveToDatabase);
    }

    public delegate void TS();

    private static void SaveToDatabase()
    { }
Run Code Online (Sandbox Code Playgroud)

这将永远不会奏效

public static void Save()
    {
        TS ts = new TS(SaveToDatabase);
    }

    public delegate string TS();

    private static void SaveToDatabase()
    { }
Run Code Online (Sandbox Code Playgroud)

Car*_*ras 6

是的,它必须返回相同的类型并具有相同的参数.换句话说,函数和委托声明必须具有相同的签名.

例:

    //Declare delegate (return double with double param)
    public delegate double Squared(double x);

    public class Circle
    {
        private double _radius;


        public static double ValueTimesValue(double Value)
        {
            return Value * Value;
        }

        public double Area(Squared sqd)
        {
            return sqd(_radius) * Math.PI;
        }

        public void CircleCharacteristics()
        {
            Squared Sq = new Squared(ValueTimesValue);
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑: If you see the sample code, Squared Delegate and ValueTimesValue function have the same return type and parameters.


Ser*_*kiy 5

来自msdn:

委托允许您将函数作为参数传递.委托的类型安全性要求您作为委托传递的函数具有与委托声明相同的签名.

另外引用C#规范:

如果满足以下两个条件,则方法和委托类型是兼容的:

  • 它们具有相同的数字或参数,具有相同的类型,顺序相同,具有相同的参数修饰符.
  • 他们的回报类型是一样的.

我认为这是对兼容性条件的非常好的描述.正如您所看到的,您的代码违反了第二个条件,这会产生编译器错误.