B S*_*ven 1 .net c# generics extension-methods overriding
我有代码,我想进行以下更改:
如何覆盖ToString()?它说:静态成员... ToString(System.Collections.Generic.List)'不能标记为覆盖,虚拟或抽象.
我如何使它通用?
public static override string ToString(this List<int> list) {
string output = "";
list.ForEach(item => output += item.ToString() + "," );
return output;
}
Run Code Online (Sandbox Code Playgroud)谢谢!
您不能使用扩展方法来覆盖现有方法。
从规范http://msdn.microsoft.com/en-us/library/bb383977.aspx
“您可以使用扩展方法来扩展类或接口,但不能覆盖它们。与接口或类方法具有相同名称和签名的扩展方法将永远不会被调用。在编译时,扩展方法的优先级始终低于类型本身中定义的实例方法。”
如果要覆盖ToString(),则需要继承List<T>而不是尝试扩展它.您已经看到,您无法将静态扩展方法标记为覆盖,并且如果扩展方法可用,则重载决策将始终用于成员方法.你的选择是
ToSpecialString()MyExtensions.ToString(myList);