在下面的类中,我想强制编译器检查它PropC
是否设置,如果没有,在编译模式下显示错误。
public class ClassA
{
public object PropA { get; set; }
public object PropB { get; set; }
public object PropC { get; set; }
}
我知道我可以使用PostShart创建自定义属性,但我想使用 .NET 内置类。
这不是 .NET 框架的默认功能。
但是,您可以使用Code Contracts 包来确保 Object Invariants。
您可以配置设置以在您的类上运行静态代码分析,以确保满足可验证的不变量。作为后备,您将获得这些合约的运行时安全性,因为访问具有无效返回值的属性将导致运行时错误或调试断言。这是通过代码合同包在编译期间执行代码重写并插入额外代码来验证您的合同来实现的。
请注意,这些行为都取决于您配置的设置。该软件包太复杂,无法在 stackoverflow 答案中解释,但您可以在http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf阅读手册/文档。
我虽然检查你的程序是否会完成类似于检查,但我认为你想要更多范围的版本:“如果我的对象创建确保在对象离开它创建的函数之前设置属性”。这在理论上是可能的,但 C# 编译器没有提供这样做的方法。我相信在编译时根本不可能进行更广泛的检查“是否在使用前分配了属性”。
重构可能是更好的方法 - 如果您根本不允许创建无效对象,则更容易证明此类对象不存在于程序中。即工厂方法模式可能是一种选择:
public class ClassA
{
public object PropC { get; private set; }
private ClassA (){};
public Create (object propC)
{
return new ClassA{ PropC = propC };
}
}
您所要求的仅在运行时可用,而不是在编译时可用。您应该使用单元测试来检查是否正在设置属性。