编辑:请注意,这里的代码可以很容易地通过让私有构造函数获取税率和名称来缩写。我假设在现实生活中,税率之间可能存在实际的行为差异。
听起来你想要像 Java 的枚举这样的东西。
C# 使这相当棘手,但您可以在某种程度上使用私有构造函数和嵌套类来做到这一点:
public abstract class TaxRate
{
public static readonly TaxRate Normal = new NormalTaxRate();
public static readonly TaxRate Whatever = new OtherTaxRate();
// Only allow nested classes to derive from this - and we trust those!
private TaxRate() {}
public abstract string Name { get; }
public abstract decimal Rate { get; }
private class NormalTaxRate : TaxRate
{
public override string Name { get { return "Regelsteuersatz"; } }
public override decimal Rate { get { return 20m; } }
}
private class OtherTaxRate : TaxRate
{
public override string Name { get { return "Something else"; } }
public override decimal Rate { get { return 120m; } }
}
}
您可能希望 TaxRate 中的某种静态方法根据名称或其他内容返回正确的实例。
我不知道这有多容易与 NHibernate 配合,但希望它会在一定程度上有所帮助......
正如评论中所指出的,它非常难看——或者至少当你有很多不同的值时会变得非常难看。部分课程可以在这里提供帮助:
// TaxRate.cs
public partial abstract class TaxRate
{
// All the stuff apart from the nested classes
}
// TaxRate.Normal.cs
public partial abstract class TaxRate
{
private class NormalTaxRate : TaxRate
{
public override string Name { get { return "Regelsteuersatz"; } }
public override decimal Rate { get { return 20m; } }
}
}
// TaxRate.Other.cs
public partial abstract class TaxRate
{
private class OtherTaxRate : TaxRate
{
public override string Name { get { return "Something else"; } }
public override decimal Rate { get { return 120m; } }
}
}
然后,您可以调整项目文件以将嵌套类显示为外部类的子类,如此 SO question中所示。