3

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

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

4

3 回答 3

15

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

实例方法总是优先于扩展方法,所以它不应该出现冲突。除此之外,它们只是语法/方便。停止试图让来电者的生活不便。

于 2013-10-24T07:31:05.237 回答
6

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

所以,你不能也不需要。

于 2013-10-25T00:06:02.700 回答
3

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

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

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

于 2013-10-24T07:31:23.017 回答