【问题标题】:Interface for Attributes属性接口
【发布时间】:2013-10-19 20:36:03
【问题描述】:

接口有点像一个契约,当它在一个类中实现时,你可以保证这个类有一组你可以调用的特定公共方法。

我想知道如何将这个原则用于属性;即有一个接口,当一个类实现它时,我保证这个类有一组特定的属性。

我正在寻找这个功能,因为我使用的是Protobuf,并且这个库需要你想要序列化的类有一个特定的属性(例如XmlType,但其他类似的属性也可以)。我想操作一组对象,无论它们的类型是什么,只要它们具有这个特定的属性。

【问题讨论】:

  • AFAIK 在当前的 .NET 版本中没有这样的功能。但是,您可以相对轻松地实现运行时检查。

标签: c# reflection attributes aop


【解决方案1】:

我不明白如何使用接口来做到这一点。 但是,您可以使用具有所需属性的方法的抽象类来做到这一点。 这些方法将调用必须实现的抽象方法。 例如:

public abstract class A
{
     [XmlType]
     public void F()
     {
          InnerF();
     }

     protected abstract InnerF();
}

public class B extends A
{
     protected void InnerF()
     {
     }
}

当然,另一种选择是运行一个后期构建工具,该工具将根据您定义的规则验证您的代码。 看看here

【讨论】:

  • 我考虑过这一点,但由于 Protobuf 如何与继承一起工作,这会使我的模型复杂化很多(如果您有兴趣,请查找 ProtoInclude 属性)。但如果这是唯一的解决方案,我会接受。
猜你喜欢
  • 1970-01-01
  • 2010-10-31
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
相关资源
最近更新 更多