【问题标题】:How to add Common property to two classes that derive from EventArgs?如何将 Common 属性添加到派生自 EventArgs 的两个类?
【发布时间】:2014-04-29 14:47:37
【问题描述】:

假设我有这个派生自 EventArgs 的类

public class myclass01:EventArgs
{
  public string channel{get;set;}
  public string generic_property{get;set;}
}

public class myclass02:EventArgs
{
  public string extension{get;set;}
  public string generic_property{get;set;}
}

我怎样才能使它不必在派生自EventArgs 的类上一遍又一遍地定义"generic_property"?有点像我将拥有一个包含所有通用属性的基类。

【问题讨论】:

  • 只需添加一个派生形式 eventargs 并具有属性并从其派生的基类。
  • 在这些日子里,C# 可能会获得“特征”,但.. 不是今天。因此,only 子类化允许“直接实现共享”(有代理类型和/或使用组合的方法,它们只是在这里不适用)。请参阅 NRoles 之类的项目,这是一种编译后转换。 YMMV。
  • 旁注:考虑不要在您的帖子中添加感谢信。如果需要,请在meta 上讨论,但请先查看thank you removed 讨论。

标签: c# .net code-reuse


【解决方案1】:

您可以创建一个派生自EventArgs 的类,将其用作所有自定义类的基础。如果你不希望它直接可用,这个类应该是abstract

public abstract class MyCommonEventBase : EventArgs
{
  public string generic_property { get; set; }
}

public class myclass01 : MyCommonEventBase
{
  public string channel{get;set;}
}

public class myclass02 : MyCommonEventBase
{
  public string extension{get;set;}
}

【讨论】:

  • 可惜 C# 没有扩展属性。那么就没有继承的必要了。想想 Objective-C 的类别。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
相关资源
最近更新 更多