如何强制编译器检查是否设置了特定属性

时间:2012-09-20 00:08:26

标签: c# .net

在下面的类中,我想强制编译器检查PropC是否设置它,如果没有,则在编译模式下显示错误。

public class ClassA 
{
    public object PropA { get; set; }
    public object PropB { get; set; }
    public object PropC { get; set; }        
}

我知道我可以使用PostShart创建自定义属性,但我想使用类中构建的.NET。

3 个答案:

答案 0 :(得分:1)

这不是.NET框架的默认功能。

但是,您可以使用Code Contracts package to ensure Object Invariants

您可以配置设置以在类上运行Static Code Analysis,以确保满足可验证的不变量。作为后退,您将获得这些合同的运行时安全性,因为具有无效返回值的属性的访问将导致运行时错误或调试断言。这是通过Code Contract包在编译期间执行代码重写并插入其他代码来验证合同来实现的。

请注意,这些行为都取决于您配置的设置。该包太复杂,无法在stackoverflow答案中解释,但您可以在http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf阅读手册/文档。

答案 1 :(得分:0)

我虽然类似于检查你的程序will finish,但我认为你想要更多的范围版本:“如果创建我的对象,确保在对象离开它创建的函数之前设置属性”。理论上这是可能的,但C#编译器没有提供这样做的方法。我相信在编译时根本无法检查“如果在使用前分配属性”。

重构可能是更好的方法 - 如果您不允许创建无效对象,则更容易证明程序中不存在此类对象。即factory method pattern可能只有一个选择:

public class ClassA 
{
   public object PropC { get; private set; }        
   private ClassA (){};
   public Create (object propC)
   {
      return new ClassA{ PropC = propC };
   }
 }

答案 2 :(得分:0)

您要求的仅在运行时提供,而不是在编译时提供。您应该使用单元测试来检查属性是否正在设置。