我的客户想出了在项目代码的每个的ToString()调用,我们应该做一个定制的操作(如添加在数据库中的行)扩展方法编译优先
我觉得扩展方法奇怪的要求对我来说会非常有用,如果它为我提供了压倒性的设施。
Microsoft为什么不允许扩展方法覆盖类方法的现有行为的任何原因?
我听说编译器优先考虑扩展方法的优先级低于类方法。有没有办法将编译器修改为优先级扩展方法而不是类方法?
我的客户想出了在项目代码的每个的ToString()调用,我们应该做一个定制的操作(如添加在数据库中的行)扩展方法编译优先
我觉得扩展方法奇怪的要求对我来说会非常有用,如果它为我提供了压倒性的设施。
Microsoft为什么不允许扩展方法覆盖类方法的现有行为的任何原因?
我听说编译器优先考虑扩展方法的优先级低于类方法。有没有办法将编译器修改为优先级扩展方法而不是类方法?
有没有办法将编译器修改为优先级扩展方法比类方法更多 ?
不,你不能。
我会从类似question引述埃里克利珀:
的扩展方法的目的是延长该组的类型可用的方法 ,不重写现有的方法;这就是为什么 他们是所谓的“扩展方法”
您可以使用扩展方法扩展一个类或接口,但不 覆盖它们。具有相同名称和 签名作为接口或类方法的扩展方法将永远不会被调用。
实际上,扩展本身存在问题。 因为实例的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() ;
}
}
将返回测试。
你应该尝试另一种方式。也许代理对象或某个东西在那个方向。
这是一个*真*奇怪的要求。我建议你简单地推回去。 (客户端是否希望这种行为对于ToString的每个* implicit *调用,例如在字符串连接中?那么在.NET框架代码中调用ToString怎么样?) – 2013-02-14 07:17:36
我同意。教育你的客户。这也是你作为顾问工作的一部分。 – 2013-02-14 07:18:09
我也同意这个:) ..谢谢你的评论.. – 2013-02-14 07:23:31