C# 为事件创建类?

C# 为事件创建类?,c#,events,C#,Events,我正在尝试了解事件,我的任务是创建从EventArgs派生的EventArgs信息类。我不知道这意味着什么,我应该怎么做?试试这个 public class EventArgsInfo : EventArgs { public string MyCustomProperty { get;set; } } 试试这个 public class EventArgsInfo : EventArgs { public string MyCustomProperty { get;set; } }

我正在尝试了解事件,我的任务是创建从EventArgs派生的EventArgs信息类。我不知道这意味着什么,我应该怎么做?

试试这个

public class EventArgsInfo : EventArgs
{
  public string MyCustomProperty { get;set; }
}
试试这个

public class EventArgsInfo : EventArgs
{
  public string MyCustomProperty { get;set; }
}

EventArgs
表示一个类型,该类型带有给定给事件的参数(因此得名)

标准EventArgs类型包含的信息量最小(甚至可能没有)。最佳实践是创建您自己的继承(对于您创建的每个自定义事件),并根据您特定事件的需要扩展参数


有关更多信息,请查看EventArgs类上的。它包含了一个很好的示例,说明了如何创建和使用自定义的
EventArgs
类。

EventArgs
表示一个类型,该类型带有给定给事件的参数(因此而得名)

标准EventArgs类型包含的信息量最小(甚至可能没有)。最佳实践是创建您自己的继承(对于您创建的每个自定义事件),并根据您特定事件的需要扩展参数


有关更多信息,请查看EventArgs类上的。它包含了一个很好的示例,说明了如何创建和使用自定义的
EventArgs
类。

事件参数用于提供有关触发的事件的附加信息,例如更改的值或项的ID。事件处理程序的签名包含
发送方
EventArgs

由于
EventArgs
非常空,您通常实现自己的类:

public event EventHandler<FooEventArgs> Foo; // produces handler(object sender, FooEventArgs e)

public sealed class FooEventArgs : EventArgs
{
    public FooEventArgs(int bar)
    {
        this.Bar = bar;
    }

    public int Bar { get; private set; }
}
公共事件事件处理程序Foo;//生成处理程序(对象发送方、FooEventArgs e)
公共密封类FooEventArgs:EventArgs
{
公共FooEventArgs(整型条)
{
这个.Bar=Bar;
}
公共整型条{get;private set;}
}

这只是一个普通的子类,就像您在其他地方创建的一样。如果不需要传递更多信息,请使用
EventArgs.Empty
(静态字段)。

事件参数用于传递有关触发事件的附加信息,例如已更改的值或项的ID。事件处理程序的签名包含
发送方
EventArgs

由于
EventArgs
非常空,您通常实现自己的类:

public event EventHandler<FooEventArgs> Foo; // produces handler(object sender, FooEventArgs e)

public sealed class FooEventArgs : EventArgs
{
    public FooEventArgs(int bar)
    {
        this.Bar = bar;
    }

    public int Bar { get; private set; }
}
公共事件事件处理程序Foo;//生成处理程序(对象发送方、FooEventArgs e)
公共密封类FooEventArgs:EventArgs
{
公共FooEventArgs(整型条)
{
这个.Bar=Bar;
}
公共整型条{get;private set;}
}

这只是一个普通的子类,就像您在其他地方创建的一样。如果不需要传递更多信息,请使用
EventArgs.Empty
(静态字段)。

class EventArgsInfo:EventArgs
class EventArgsInfo:EventArgs
小心使用可变
EventArg
对象。一个实例由所有处理程序共享,因此意外的修改可能会产生严重的副作用。在某些情况下需要这种行为,例如请求取消操作或将数据传回。请小心使用可变
eventag
对象。一个实例由所有处理程序共享,因此意外的修改可能会产生严重的副作用。在某些情况下需要这种行为,例如请求取消操作或传回数据。有趣的是,委托也参与其中吗?事件基本上是委托的一种特殊形式:
EventHandler
是具有参数
object sender
te
的多播委托。多播意味着委托可以指向顺序执行的多个方法。这有用吗?这有点难以在评论中描述——挖掘RpgNick的链接也可能对你有所帮助。:)人们通常会让EventArgs的子类处于打开或密封状态吗?@KyleBaran My在这里使用
sealed
没有特定于EventArgs的原因。我倾向于密封类,除非我想使用(并考虑)继承。在这种情况下出现的一般术语是Liskov替换原则、开放/封闭原则、“更喜欢组合而不是继承”以及这个有趣的讨论,委托也参与其中吗?事件基本上是委托的一种特殊形式:
EventHandler
是一个多播委托,具有参数
objectsender
te
。多播意味着委托可以指向顺序执行的多个方法。这有用吗?这有点难以在评论中描述——挖掘RpgNick的链接也可能对你有所帮助。:)人们通常会让EventArgs的子类处于打开或密封状态吗?@KyleBaran My在这里使用
sealed
没有特定于EventArgs的原因。我倾向于密封类,除非我想使用(并考虑)继承。在这种情况下出现的一般术语是Liskov替换原则、开放/封闭原则、“优先组合而非继承”以及本讨论