C# 募捐活动似乎有所改变
在以前版本的.NET(我想是3)中,我使用类似这样的东西来引发一个带有自定义C# 募捐活动似乎有所改变,c#,.net,events,.net-4.5,C#,.net,Events,.net 4.5,在以前版本的.NET(我想是3)中,我使用类似这样的东西来引发一个带有自定义EventArgs public delegate void NewTitleEventArgs(object sender, string title); public event NewTitleEventArgs NewTitle; public class NewTitleEventArgs : EventArgs //Class used to pass data to event consumers whe
EventArgs
public delegate void NewTitleEventArgs(object sender, string title);
public event NewTitleEventArgs NewTitle;
public class NewTitleEventArgs : EventArgs //Class used to pass data to event consumers when sending notification.
{
public readonly string NewTitle;
public NewTitleEventArgs(string Title)
{
NewTitle = Title;
}
}
不过,我现在似乎只需要这样做:
public delegate void NewTitleEventArgs(object sender, string title);
public event NewTitleEventArgs NewTitle;
完全无视课堂。这是标准还是新事物 第二个示例也不是新的,它已经存在,第一个示例用于在代理上实现您自己的事件参数 e、 g 公共活动NewTitleEventArgs NewTitle
然后,您需要实现自己的MyCustomArgment事件参数您的第二个示例也不是新的,它已经存在,第一个示例用于在代理上实现自己的事件参数 e、 g 公共活动NewTitleEventArgs NewTitle
然后,您需要实现自己的MyCustomArgment事件参数您的第一个示例没有多大意义,无法编译。您正在用相同的名称声明两个类型(一个委托和一个类都称为
NewTitleEventArgs
),这是不允许的
您的第二个示例编译并运行良好,它将在C#到C#1.0的所有版本中编译。但是它不符合,所以你不应该写这样的代码
一致性模式是创建一个继承自EventArgs
的类,并将其用作委托的第二个参数
您可以这样写(我还修复了代码中的一些其他样式问题):
自C#2.0(2005年发布)以来,您还可以使用通用的EventHandler
委托类型,以避免为每个事件args类型声明新的委托类型:
public class NewTitleEventArgs : EventArgs
{
public string NewTitle { get; private set; }
public NewTitleEventArgs(string title)
{
NewTitle = title;
}
}
public event EventHandler<NewTitleEventArgs> NewTitle;
公共类NewTitleEventArgs:EventArgs
{
公共字符串NewTitle{get;private set;}
公共NewTitleEventArgs(字符串标题)
{
新标题=标题;
}
}
公共事件处理程序NewTitle;
您的第一个示例没有多大意义,无法编译。您正在用相同的名称声明两个类型(一个委托和一个类都称为NewTitleEventArgs
),这是不允许的
您的第二个示例编译并运行良好,它将在C#到C#1.0的所有版本中编译。但是它不符合,所以你不应该写这样的代码
一致性模式是创建一个继承自EventArgs
的类,并将其用作委托的第二个参数
您可以这样写(我还修复了代码中的一些其他样式问题):
自C#2.0(2005年发布)以来,您还可以使用通用的EventHandler
委托类型,以避免为每个事件args类型声明新的委托类型:
public class NewTitleEventArgs : EventArgs
{
public string NewTitle { get; private set; }
public NewTitleEventArgs(string title)
{
NewTitle = title;
}
}
public event EventHandler<NewTitleEventArgs> NewTitle;
公共类NewTitleEventArgs:EventArgs
{
公共字符串NewTitle{get;private set;}
公共NewTitleEventArgs(字符串标题)
{
新标题=标题;
}
}
公共事件处理程序NewTitle;
我想我知道你在说什么,是的,发生了变化。在和更早的版本中,EventHandler
的定义是
public delegate void EventHandler<TEventArgs>(
Object sender,
TEventArgs e
)
where TEventArgs : EventArgs
这将允许订阅成员
public void myObject_NewTitle(object sender, string title)
{
//...
}
我想我知道你在说什么,是的,有一个变化。在和更早的版本中,
EventHandler
的定义是
public delegate void EventHandler<TEventArgs>(
Object sender,
TEventArgs e
)
where TEventArgs : EventArgs
这将允许订阅成员
public void myObject_NewTitle(object sender, string title)
{
//...
}
不要让一些
EventArgs
包装器(其中包含您的标题)作为唯一的成员。不确定您的意思,因为第一个示例无法编译,您也没有引发事件,只声明了它。但是,EventHandler
的声明删除了.NET 4.5中的T:EventArgs
约束(如果您正在讨论的话)。如果没有类定义,代码将无法编译。这肯定没有改变。@CamBruce相反,如果类存在,代码就不会编译,因为它声明了两个同名的类型(委托和类)。等等。。。既能编译又能工作!我在其他地方提到了这件事——这是我所看到的定义,而不是召唤。@Mike z是的,Mike——这就是我所说的——谢谢。将您的注释更改为答案,您就得到了要点不确定您的意思,因为第一个示例无法编译,并且您没有引发事件,只是声明了它。但是,EventHandler
的声明删除了.NET 4.5中的T:EventArgs
约束(如果您正在讨论的话)。如果没有类定义,代码将无法编译。这肯定没有改变。@CamBruce相反,如果类存在,代码就不会编译,因为它声明了两个同名的类型(委托和类)。等等。。。既能编译又能工作!我在其他地方提到了这件事——这是我所看到的定义,而不是召唤。@Mike z是的,Mike——这就是我所说的——谢谢。将您的注释更改为答案,您就得到了要点在EventHandler
中有一个新的更改,不再需要T
。你现在可以在第二个论点中使用任何类。@ScottChamberlain有趣,我不知道(我不知怎么错过了mike z的评论)。但我怀疑这就是问题所在,它甚至没有提到EventHandler
。在EventHandler
中有一个新的变化,t
不再是必需的。你现在可以在第二个论点中使用任何类。@ScottChamberlain有趣,我不知道(我不知怎么错过了mike z的评论)。但我怀疑这就是问题所在,它甚至没有提到EventHandler
。
public void myObject_NewTitle(object sender, string title)
{
//...
}