gpt4 book ai didi

c# - 将扩展方法限制为基类

转载 作者:行者123 更新时间:2023-12-01 20:07:04 26 4
gpt4 key购买 nike

是否有一种方法可以防止扩展方法同时出现在派生类型和基类型中,并将它们限制为仅适用于基类型?

我的情况有点特殊,但长话短说,我有一个场景,可以安全地从基本实体转换为派生实体,也可以安全地从派生实体列表转换为派生实体基本实体列表,反之亦然。由于这些强制转换通常是不安全的,因此我提供了扩展方法来执行强制转换,以便使用我的库的开发人员不必记住哪些强制转换是安全的,哪些不安全。

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;
}
}

最佳答案

没有。你不能那样做。扩展方法适用于接收器的任何派生类型。您能做的最好的事情就是动态地强制执行此类操作(基于对象的运行时类型)。即抛出异常。但在这种情况下这是不合适的。您希望该方法可在派生类型的对象上调用。

更重要的是,从 API 设计的角度来看,这不是您想要做的事情。考虑“ToString()”。它也存在于 String 上。

关于c# - 将扩展方法限制为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13938138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com