internal abstract class ReadonlyCoefs
{
public const Boolean Allowed = true;
public const Boolean Disallowed = false;
public abstract Boolean GetCoef();
}
internal class Coefs : ReadonlyCoefs
{
public override Boolean GetCoef() { ... }
public void SetCoef() { ... }
}
现在,假设我想在某个地方使用它
if (variable == ReadonlyCoefs.Allowed)
...
我不认为我想拥有Readonly前缀。
在这种情况下,我可以添加实例方法IsAllowed和SetAllowed,SetDisallowed,但是如果有很多consts,那么如何处理这种情况呢?
答案 0 :(得分:0)
不,至少就目前而言,没有办法做你想做的事。在C#6中,将能够使用using
指令导入类的静态成员:
using static SomeNamespace.ReadonlyCoefs;
这样就可以在不指定类型名称的情况下访问ReadonlyCoefs
的静态成员。
那就是说,鉴于你目前的设计,我同意汉斯你应该使用enum
:
enum CoefPermission
{
Allowed,
Disallowed,
}
internal abstract class ReadonlyCoefs
{
public abstract CoefPermission GetCoef();
}
然后:
if (variable == CoefPermission.Allowed) ...
这也应该与C#6中的using static
功能兼容。您可以拥有using static SomeNamespace.CoefPermission;
,然后代码可以显示if (variable == Allowed) ...
。
现在,所说的所有,我对你当前的设计持怀疑态度。也许这对非bool
值有意义(特别是如果你切换到基于enum
的方法)。但你没有表现出类似的东西。你所拥有的只有bool
值,恕我直言制作常量或枚举这些将是愚蠢的。相反,为什么不只是有这样的东西:
internal abstract class ReadonlyCoefs
{
public abstract Boolean IsCoefAllowed();
}
internal class Coefs : ReadonlyCoefs
{
public override Boolean IsCoefAllowed() { ... }
public void SetIsCoefAllowed() { ... }
}
然后:
if (variable) ...
如果你给变量一个好名字,那就更好了:
if (isCoefAllowed) ...
恕我直言,这更具可读性和可维护性。