有没有办法规定类的客户应该为类中的一组属性指定一个值。例如(见下面的代码),我可以规定在编译时应该指定 Employment 类中的“EmploymentType”属性吗?我知道我可以使用参数化构造函数等。我特别希望在编译时输出自定义警告或错误。这可能吗?
public class Employment
{
public EmploymentType EmploymentType {get; set;}
}
public enum EmploymentType
{
FullTime = 1,
PartTime= 2
}
public class Client
{
Employment e = new Employment();
// if i build the above code, i should get a error or warning saying you should specify value for EmploymentType
}
最佳答案
正如 cmsjr 所述,您需要做的是:
public class Employment
{
public Employment(EmploymentType employmentType)
{
this.EmploymentType = employmentType;
}
public EmploymentType EmploymentType { get; set; }
}
这将强制调用者像这样在创建时传递值:
Employment e = new Employment(EmploymentType.FullTime);
在需要默认构造函数(如序列化)但仍想执行规则的情况下,您将需要某种状态验证。例如,任何时候您尝试对 Employment 类执行操作时,您都可以让它检查有效状态,如下所示:
public EmploymentType? EmploymentType { get; set; } // Nullable Type
public void PerformAction()
{
if(this.Validate())
// Perform action
}
protected bool Validate()
{
if(!EmploymentType.HasValue)
throw new InvalidOperationException("EmploymentType must be set.");
}
如果您正在寻找抛出自定义编译器警告,这是不可能的。我在这里问了一个类似的问题Custom Compiler Warnings
关于c# - 规定类中需要一个属性 - 编译时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554405/