c# - 规定类中需要一个属性 - 编译时

标签 c# .net compiler-construction clr

有没有办法规定类的客户应该为类中的一组属性指定一个值。例如(见下面的代码),我可以规定在编译时应该指定 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/

相关文章:

c# - 如何从所有 txt 文件 (*.txt) 中读取所有文本

compiler-construction - 为什么 JIT 代码比编​​译或解释的代码消耗更多的内存?

python - 在 Sublime Text 2 中运行 python 出现错误

java - 使用 javacc 解析和评估简单语言

c# - 将 ASP.NET 网站连接到 SQL 数据库

c# - 访问单元格datagridview Winform C#的内容

c# - 在 Objective C 中调用 C# webMethod

.net - .net 4.0 动态变量的内存是如何分配的?

c# - Xamarin 表单更新 listView itemSsource

c# - Task.WhenAll 订单的结果有保证吗?