在我的项目中,我有以下枚举:
public enum LicenseStateType
{
Valid,
Expiring,
Expired
}
和以下表示许可证状态的类:
public class LicenseState
{
public LicenseStateType State { get; protected set; }
public int DaysLeft { get; protected set; }
}
在我的场景中,当LicenseStateType == LicenseStateType.Valid
或LicenseStateType == LicenseStateType.Expired
时,我会创建一个像LicenseState(LicenseStateType Type)
这样的构造函数,但当LicenseStateType == LicenseStateType.Expiring
时,我会发送剩余的天数来调用像LicenseState(LicenseStateType.Expiring, int daysleft)
这样的构造函数。
我该怎么做?或者有更好的方法来做到这一点吗?
3条答案
按热度按时间bq8i3lrv1#
没有编译时的方法可以根据参数的 * 值 * 来强制执行不同的编译器签名。所以我有几个选择:
DaysLeft
成为一个 * 可选 * 编译器参数,并在运行时验证它ExpiringLicenseState
的不同类型,它只接受DaysLeft
构造函数参数并将LicenseStateType.Expiring
传递给基构造函数。您还可以将DaysLeft
属性移到该类中,因为它是唯一与之明显相关的状态。如果您在编译时知道许可证是否过期,那么第二个许可证将为您提供更好的编译时安全性。如果您在编译时不知道,那么运行时检查会更清楚。
fhg3lkii2#
为什么不使用一个构造函数来传递剩余天数,并让内部逻辑决定其状态?例如:
然后,您可以删除
DaysLeft
属性,在我看来,这是毫无意义的。9o685dep3#
可以使用私有构造函数。然后创建公共静态方法来创建类的对象,这些对象强制执行所需的行为。只有当您创建一个即将到期的许可证时,才有可能传递剩余的天数: