C# 扩展方法能否覆盖实例方法?
是否可以通过扩展方法覆盖实例方法?例如,我有一个程序集(已编译,没有源代码),我想重写一些行为 我为测试创建了一些代码:C# 扩展方法能否覆盖实例方法?,c#,.net,extension-methods,C#,.net,Extension Methods,是否可以通过扩展方法覆盖实例方法?例如,我有一个程序集(已编译,没有源代码),我想重写一些行为 我为测试创建了一些代码: public class SomeClass { public void MyMethod() { Console.WriteLine("Instance method is called"); } } public static class ExtMethods { public static void MyMethod(t
public class SomeClass
{
public void MyMethod()
{
Console.WriteLine("Instance method is called");
}
}
public static class ExtMethods
{
public static void MyMethod(this SomeClass c)
{
Console.WriteLine("Extention method is called");
}
}
然后我尝试使用:
SomeClass s = new SomeClass();
s.MyMethod();
编译成功,IntelliSence将此方法标记为实例(扩展方法有另一个图标)
输出说
实例方法被调用
不存在关于扩展方法的注释。所以,没有办法覆盖实例方法,对吗
为什么编译器和VS的行为如此非信息性?如果我开发了一个扩展方法,并且已经存在相同的实例方法(我不知道),我可以花几个小时来理解为什么行为与预期不同…不,不能用扩展方法覆盖实例方法。因此,如果名称为“extension”方法,则只能扩展实例方法 实例方法将始终重写扩展方法 如果要强制调用扩展方法,请将其作为常规
static
方法调用:
ExtMethods.MyMethod(yourClassInstance);
关于为什么VS没有告诉你它是一个复制品:实际上它不能这样做。如果在
对象上有一个扩展方法
,该怎么办。如果任何方法是重复的,VS应该检查所有类及其方法吗?他们只是没有建立检查,这是你应该自己做的。不,你不能用扩展方法覆盖实例方法。因此,如果名称为“extension”方法,则只能扩展实例方法
实例方法将始终重写扩展方法
如果要强制调用扩展方法,请将其作为常规static
方法调用:
ExtMethods.MyMethod(yourClassInstance);
关于为什么VS没有告诉你它是一个复制品:实际上它不能这样做。如果在
对象上有一个扩展方法
,该怎么办。如果任何方法是重复的,VS应该检查所有类及其方法吗?他们只是没有建立检查,这是你应该自己做的。不,你不能用扩展方法覆盖实例方法。因此,如果名称为“extension”方法,则只能扩展实例方法
实例方法将始终重写扩展方法
如果要强制调用扩展方法,请将其作为常规static
方法调用:
ExtMethods.MyMethod(yourClassInstance);
关于为什么VS没有告诉你它是一个复制品:实际上它不能这样做。如果在
对象上有一个扩展方法
,该怎么办。如果任何方法是重复的,VS应该检查所有类及其方法吗?他们只是没有建立检查,这是你应该自己做的。不,你不能用扩展方法覆盖实例方法。因此,如果名称为“extension”方法,则只能扩展实例方法
实例方法将始终重写扩展方法
如果要强制调用扩展方法,请将其作为常规static
方法调用:
ExtMethods.MyMethod(yourClassInstance);
关于为什么VS没有告诉你它是一个复制品:实际上它不能这样做。如果在对象上有一个扩展方法
,该怎么办。如果任何方法是重复的,VS应该检查所有类及其方法吗?他们只是没有建立支票,这是你应该自己做的事。怎么没有信息?解释一切。在“编译时绑定扩展方法”一节中,它实际上回答了您的确切问题。如何不提供信息?解释一切。在“编译时绑定扩展方法”一节中,它实际上回答了您的确切问题。如何不提供信息?解释一切。在“编译时绑定扩展方法”一节中,它实际上回答了您的确切问题。如何不提供信息?解释一切。在“编译时绑定扩展方法”一节中,它实际上回答了您的确切问题。