我们有这样的界面吗?
public interface ILicense
{
bool IsTrial { get; }
bool IsTrialLicense { get; }
}
public class StandardLicense : ILicense
{
public bool IsTrial { get { return true; } }
public bool IsTrialLicense { get { return true; } }
}
但是现在对新许可证(名称为ZLicense)提出了新要求,该许可证具有其他方法。
总结ZLicense的外观如何:
public class ZLicense : ILicense
{
public bool IsTrial { get { return true; } }
public bool IsTrialLicense { get { return true; } }
public string GenerateActivationKey()
public string GenerateDeactivationKey()
}
所以我有两个选择:
添加两个新方法进行接口(并创建一个抽象类)
投射界面并使用新的两种方法
用法可以这样使用:
if(ILicense is ZLicense)
{
ZLicense license = ILicense as ZLicense
.. can use new methods lile license.GetActivationKey()
}
这里的最佳做法是什么?
答案 0 :(得分:1)
如果实现__mh_execute_header
的每种许可证类型都应支持ILicense
,则扩展接口。
如果是这样,并且您有默认实现的想法,请选择抽象类。
如果仅GetActivationKey()
具有方法ZLicense
,则仅在其中实现(需要广播)。
如果将来可能会有一些不同的许可证可能支持GetActivcationKey()
,但又有一些不支持该方法的许可证,请从GetActivationKey()
派生一个新接口,例如ILicense
。然后,实现此接口将迫使开发人员实现激活密钥处理。