Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展方法能否覆盖实例方法?_C#_.net_Extension Methods - Fatal编程技术网

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应该检查所有类及其方法吗?他们只是没有建立支票,这是你应该自己做的事。

怎么没有信息?解释一切。在“编译时绑定扩展方法”一节中,它实际上回答了您的确切问题。如何不提供信息?解释一切。在“编译时绑定扩展方法”一节中,它实际上回答了您的确切问题。如何不提供信息?解释一切。在“编译时绑定扩展方法”一节中,它实际上回答了您的确切问题。如何不提供信息?解释一切。在“编译时绑定扩展方法”一节中,它实际上回答了您的确切问题。