C# 扩展方法编译器优先级
我的客户提出了一个奇怪的要求,即对于项目代码中的每个.ToString()调用,我们都应该执行一个自定义操作(比如在db中添加一行) 我觉得扩展方法对我来说非常有用,如果它能为我提供覆盖功能的话 Microsoft为什么不允许扩展方法重写类方法的现有行为 我听说编译器对扩展方法的优先级比类方法低。有没有一种方法可以将编译器修改为优先于类方法的扩展方法 有没有一种方法可以修改编译器以使扩展方法更具优先级 而不是类方法 不,你不能 我想引用埃里克·利珀特(Eric Lippert)的一句类似的话: 扩展方法的目的是扩展方法集 在类型上可用,不覆盖现有方法;这就是为什么 它们被称为“扩展方法” 发件人: 您可以使用扩展方法来扩展类或接口,但是 不要覆盖它们。具有相同名称和名称的扩展方法 将永远不会调用作为接口或类方法的签名 有没有一种方法可以修改编译器以使扩展方法更具优先级 而不是类方法 不,你不能 我想引用埃里克·利珀特(Eric Lippert)的一句类似的话: 扩展方法的目的是扩展方法集 在类型上可用,不覆盖现有方法;这就是为什么 它们被称为“扩展方法” 发件人: 您可以使用扩展方法来扩展类或接口,但是 不要覆盖它们。具有相同名称和名称的扩展方法 将永远不会调用作为接口或类方法的签名C# 扩展方法编译器优先级,c#,.net,C#,.net,我的客户提出了一个奇怪的要求,即对于项目代码中的每个.ToString()调用,我们都应该执行一个自定义操作(比如在db中添加一行) 我觉得扩展方法对我来说非常有用,如果它能为我提供覆盖功能的话 Microsoft为什么不允许扩展方法重写类方法的现有行为 我听说编译器对扩展方法的优先级比类方法低。有没有一种方法可以将编译器修改为优先于类方法的扩展方法 有没有一种方法可以修改编译器以使扩展方法更具优先级 而不是类方法 不,你不能 我想引用埃里克·利珀特(Eric Lippert)的一句类似的话:
实际上,扩展本身存在一个问题。 因为实例的ToString()方法将优先于扩展 有 简言之:
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()方法将优先于扩展 有 简言之:
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的隐式调用都有这种行为,例如字符串连接?在.NET framework代码中对ToString的调用如何?)我同意。教育你的客户。这也是你作为顾问工作的一部分。我也同意这一点:)。。谢谢你的评论。这可能是一本向你的客户解释的好读物!我没有意识到这一点…很大的一部分。。超级喜欢……这真是一个奇怪的要求。我建议你干脆往后推。(客户端是否希望每次对ToString的隐式调用都有这种行为,例如字符串连接?在.NET framework代码中对ToString的调用如何?)我同意。教育你的客户。这也是你作为顾问工作的一部分。我也同意这一点:)。。谢谢你的评论。这可能是一本向你的客户解释的好读物!我没有意识到这一点…很大的一部分。。超级喜欢。。