AJ *_*son 2 c# inheritance extension-methods
有没有办法阻止扩展方法出现在派生类型和基类型中,并且只将它们限制为基类型?
我的情况有点特殊情况,但长话短说,我有一个场景,从基础实体转换到派生实体是安全的,也可以安全地从派生实体列表转换为基数列表实体,反之亦然.由于这些演员通常是不安全的,我提供扩展方法来进行演员表,以便使用我的库的开发人员不必记住哪些演员表是安全的,哪些不是.
ToDerivedEntity扩展方法是相对于BaseEntity实现的,虽然在DerivedEntity上调用ToDerivedEntity没有任何损害,但从可用性的角度来看,如果我可以阻止ToDerivedEntity出现在DerivedEntity上并仅限制它,那将是很好的到BaseEntity.
public class BaseEntity
{
}
public class DerivedEntity : BaseEntity
{
}
static class ExtensionMethods
{
// Should only show up on BaseEntity.
public static ToDerivedEntity(this BaseEntity source)
{
return (DerivedEntity)source;
}
}
Run Code Online (Sandbox Code Playgroud)
不,你不能这样做.扩展方法适用于任何派生类型的接收器.您可以做的最好的事情是动态地强制执行此类操作(基于对象的运行时类型).即抛出异常.但在这种情况下,这是不合适的.您希望该方法可以在派生类型的对象上调用.
更重要的是,从API设计的角度来看,这不是您想要做的事情.考虑"ToString()".它也存在于String上.
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |