c# - 如何隐藏派生类的扩展方法?

标签 c# inheritance extension-methods

我有一个基本抽象类来实现模板方法模式。

public abstract class OptionalParameter
{
    //Template Method Pattern
    public string GenerateQueryString()
    {
        return this.GenerateQueryStringWithParameters();
    }
}

而且我有一个适用于所有 OptionalParameter 类型的扩展方法。

public static class OptionalParameterExtensions
{
    public static string GenerateQueryStringWithParameters(this OptionalParameter optionalParameters)
    {

    }
}

我从 OptionalParameter 继承了一个名为 CalendarEventParameter 的类。

public class CalendarEventParameters : OptionalParameter
{

}

当我想创建 CalenderEventParameter 的实例时,我看到了抽象类中的 GenerateQueryString() 方法和 GenerateQueryStringWithParameters() 扩展方法。

我不想从派生类中看到它。我试图将扩展方法签名为 Private,但这样我也无法从我的抽象类访问。

是否可以只从基本抽象类调用扩展方法?

最佳答案

没有。扩展方法通常不能对派生类隐藏。

只有当其他类在另一个程序集中而不是扩展方法的所有调用者时才有可能(您可以将扩展方法标记为 internal 然后)。

您还可以将扩展方法放在另一个 namespace 中,您可以将其包含在要调用扩展方法的每个类文件中。这不是真正的隐藏,但它可以完成这项工作。

关于c# - 如何隐藏派生类的扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788804/

相关文章:

c# - 无法将扩展方法转换为存储表达式

c# - 在 C# Windows 窗体中将用户输入保存为变量

c# - Perforce API 的 .net 包装器?

调用 Swift 协议(protocol)扩展方法而不是子类中实现的方法

.net - 如何模拟(使用最小起订量)Unity 方法

c# - 是否有特定原因在类中不允许使用同名属性和方法,但允许将其作为扩展方法使用?

c# - 如何使用 Reflection.Emit 添加引用

c# - WinUSB_Initialize 函数出现 INVALID_FUNCTION (0x1) 错误

java - 多级继承 "is-a"关系?

c++ - 从我正在扩展的嵌套类中覆盖方法