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!");
}
}
问题是,你如何防止这种情况?
你没有。你不能。而且你不应该想要。
实例方法始终优先于扩展方法,因此不应发生冲突。除此之外,它们只是语法/便利。不要再试图让来电者的生活变得不方便。
您可能会
对术语"扩展方法"感到困惑。它不是类中的方法,甚至不是派生类;它是对类型的操作。它无法访问类层次结构的私有、受保护或内部成员,因此该类仍然是密封的。
所以,你不能也不需要。
没有意义。任何用户仍然可以创建一个静态类,该类实现了使用您的类类型的方法。
他们只是在声明中省略了"this",调用者必须显式传递对象,而不是使用更简单的 . 语法。最终结果将是相同的。
扩展方法只是表达我刚才描述的内容的一种更好方式,无论如何,这总是可能的。