我的客户提出了一个奇怪的要求,即对于项目代码中的每个.ToString()调用,我们应该进行自定义操作(比如在db中添加一行)
我认为扩展方法对我来说非常有用,如果它能为我提供最重要的设施。
Microsoft不允许扩展方法覆盖类方法的现有行为的任何原因?
我听说编译器将扩展方法的优先级设置为低于类方法。有没有办法将编译器修改为优先级扩展方法而不是类方法?
答案 0 :(得分:7)
有没有办法将编译器修改为优先级扩展方法 比类方法?
不,你不能。
我会引用Eric Lippert的类似question:
扩展方法的目的是扩展方法集 在类型上可用,而不是覆盖现有方法;这就是为什么 他们被称为“扩展方法”
您可以使用扩展方法来扩展类或接口,但是 不要覆盖它们。一个具有相同名称和扩展名的扩展方法 签名作为接口或类方法永远不会被调用。
答案 1 :(得分:1)
实际上扩展本身存在问题。 因为实例的ToString()方法会有过度扩展。
有a good explanation on the 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() ;
}
}
将返回测试。
你应该尝试另一种方式。也许代理对象或那个方向的东西。