c#中密封类的扩展方法

时间:2013-10-24 07:25:30

标签: c# .net extension-methods

我有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!");
   }
}

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

3 个答案:

答案 0 :(得分:13)

你没有。你不能。你不应该这样做。

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

答案 1 :(得分:6)

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

所以,你不能也不需要。

答案 2 :(得分:3)

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

他们只会忽略声明中的'this',并且调用者必须显式传递对象,而不是使用更简单的对象。句法。最终结果是相同的。

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