代码之家  ›  专栏  ›  技术社区  ›  spoulson

如何在类定义上要求属性?

  •  6
  • spoulson  · 技术社区  · 14 年前

    有没有一种方法可以对类或接口实现上的某些属性强制执行编译要求?

    例如,假设我的应用程序使用了一系列包含 const int 资源价值。我想在一个 Description 属性来描述其内容。在概念上,我想将这个属性需求应用到一个接口上,然后每个静态类将用其所需的实现它 说明 . 我可以编写运行时检查或单元测试来检查遵从性。但真正的编译时检查是最好的。

    有这样的事吗?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Jon Skeet    14 年前

    不,没有这样的。据我所知,单元测试是你能做的最好的。

    如果可以自动识别类(通过名称或用类修饰的其他属性),则可以轻松地为程序集中的所有类编写单元测试。

        2
  •  1
  •   Venemo    14 年前

    这在运行时是可能的,通过反射。

    下面是一个单元测试方法:

    ...
    using System.Reflection;
    using System.Diagnostics;
    using System.Linq;
    ...
    
    [TestMethod]
    public void CheckAttributes()
    {
        var notAttributed = Assembly.GetAssembly(typeof(SomeClass))
            .GetTypes()
            .Where(t => t.GetCustomAttributes(typeof(MyAttribute), true).Count() == 0);
    
        Assert.AreEqual<int>(0, notAttributed.Count());
    }
    

    在哪里? MyAttribute 属性的类型,以及 SomeClass


    如果要在生产代码中执行此操作,请将 Conditional("DEBUG")
    (因为反射速度不快,而且在生产模式下运行确实没有意义,是吗?)