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