在下面的类中,我想强制编译器检查PropC
是否设置它,如果没有,则在编译模式下显示错误。
public class ClassA
{
public object PropA { get; set; }
public object PropB { get; set; }
public object PropC { get; set; }
}
我知道我可以使用PostShart创建自定义属性,但我想使用类中构建的.NET。
答案 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)
您要求的仅在运行时提供,而不是在编译时提供。您应该使用单元测试来检查属性是否正在设置。