C# 中密封类的扩展方法

本文关键字:扩展 方法 密封类 | 更新日期: 2023-09-27 18:36:44

我有这个sealed类,

public sealed class A
{
    public string AName {get;set;}
}

有人可以为它编写一个扩展方法,如下所示:

public static class Extensions
{
   public static void ExtensionMethodForA (this A a)
   {
      Console.WriteLine("A's Extension method!");
   }
}

问题是,你如何防止这种情况?

C# 中密封类的扩展方法

你没有。你不能。而且你不应该想要。

实例方法始终优先于扩展方法,因此不应发生冲突。除此之外,它们只是语法/便利。不要再试图让来电者的生活变得不方便。

您可能会

对术语"扩展方法"感到困惑。它不是类中的方法,甚至不是派生类;它是对类型的操作。它无法访问类层次结构的私有、受保护或内部成员,因此该类仍然是密封的。

所以,你不能也不需要。

没有意义。任何用户仍然可以创建一个静态类,该类实现了使用您的类类型的方法。

他们只是在声明中省略了"this",调用者必须显式传递对象,而不是使用更简单的 . 语法。最终结果将是相同的。

扩展方法只是表达我刚才描述的内容的一种更好方式,无论如何,这总是可能的。