为什么System.Delegate不能作为事件?

Why System.Delegate can not be used as event?

主要问题

event System.Delegate d;

上面的代码会引发错误:

Compiler Error CS0066
'event': event must be of a delegate type

为什么System.Delegate不能用作事件?
如果我想让一个事件接受任何类型的委托,我应该使用什么?


之后

(一周后补上,下面跟问题关系不大,更多是自己的问题。)

感谢@John。
感谢他的回答。感谢你问我“你为什么想要这样的东西?”。

我说“如果我需要一个活动,但我不确定我可以在活动中使用什么样的方法。那么我想要一个任何类型的活动。”
我心中的情况是这样的:
有一个像环境这样复杂的class,从它的不同部分改变可能会引发不同类型的事件。

class Environment
{
    float temperature;
    float humidity;
    float factor3;
    float factor4;
    float factor5;
    //more factors may be added later.
}

/*
    Need an event for Environment.
    The event should invoke: 
        TemperatureInfluence.OnTemperatureChange(...)
        HumidityInfluence.OnHumidityChange(...)
        Factor3And4Influence.OnFactor3And4Change(...)
        Factor4And5Influence.OnFactor4And5Change(...)
    and it should be albe to handle mehtod of new kinds.
*/

class TemperatureInfluence
{
    public void OnTemperatureChange(float temperature)
    {
        Console.WriteLine("Temperature changed, put on more or less clothes");
    }
}

class HumidityInfluence
{
    public void OnHumidityChange(float humidity)
    {
        Console.WriteLine("Humidity changed, drink more or less water");
    }
}

class Factor3And4Influence
{
    public void OnFactor3And4Change(float factor3, float factor4)
    {
        Console.WriteLine("Factor3 and Factor4 changed, do blablabla");
    }
}

class Factor4And5Influence
{
    public void OnFactor4And5Change(float factor4, float factor5)
    {
        Console.WriteLine("Factor4 and Factor5 changed, do hohohuhu");
    }
}

我认为我的问题是我不明白 C# 中的事件关键字是什么。
event关键字给delegate增加了一些特性,仅此而已。(所以应该和delegate一样,有精确的参数。)
它不同于真实的文字事件,后者可以是任何类型。

如果我真的需要任何类型的事件,我不应该指望事件关键字。我想我可能需要为此做一个结构,或者只是为新事件编写新代码。

System.Delegate 是 class,不是代表。

事件是类型的成员。所有成员都必须指定自己的数据类型。如果您希望能够引用任何类型,则可以对字段等使用 Object,或者您可以使用基类型来引用任何派生类型。委托类型不相互继承,因此没有可指定的基本委托类型来引用派生委托类型。

反正没有意义。您为什么要接受带有您无法为其传递参数的参数的方法的委托?只需将您的事件声明为 EventHandler 类型,然后您就可以传递通常的参数,即 object sender, EventArgs e 但没有参数的方法仍然可以用作处理程序。任何其他参数都没有意义,因为您无论如何都无法提供参数。