我的客户提出了一个奇怪的要求,即对于项目代码中的每个 .ToString() 调用,我们都应该进行自定义操作(例如在 db 中添加一行)
我觉得扩展方法对我很有用,如果它为我提供了压倒一切的设施。
为什么微软不允许扩展方法覆盖类方法的现有行为?
我听说编译器将扩展方法的优先级低于类方法。有没有办法将编译器修改为优先于扩展方法而不是类方法?
有没有办法将编译器修改为优先于扩展方法而不是类方法?
不,你不能。
我会从类似的问题中引用 Eric Lippert 的话:
扩展方法的目的是扩展类型上可用的方法集,而不是覆盖现有方法;这就是为什么它们被称为“扩展方法”
来自MSDN - 扩展方法:
您可以使用扩展方法来扩展类或接口,但不能覆盖它们。永远不会调用与接口或类方法具有相同名称和签名的扩展方法。
实际上,扩展本身存在问题。因为实例的 ToString() 方法将具有扩展性。
Microsoft Developer Network 上有一个很好的解释。
简而言之:
class Program
{
static void Main(string[] args)
{
try
{
string value = "test";
Console.WriteLine(value.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.WriteLine("End");
Console.Read();
}
}
public static class StaticExtensions
{
public static string ToString(this Object obj)
{
if (obj == null)
return "";
else
return obj.GetType().FullName + obj.ToString() ;
}
}
将返回测试。
您可能应该尝试另一种方式。也许是代理对象或那个方向的东西。