可能重复:
C#中是否有任何方法可以使用扩展方法覆盖类方法?
我的代码就像
public class TestA
{
public string ColA { get; set; }
public string ColB { get; set; }
public string ColC { get; set; }
public void MethodA()
{
MessageBox.Show("Original A1.");
}
}
static class ExtenstionTest
{
public static void MethodA(this TestA A1)
{
MessageBox.Show("Extended A1.");
}
}
Run Code Online (Sandbox Code Playgroud)
现在如果我把MethodA称为
TestA a = new TestA();
a.MethodA();
Run Code Online (Sandbox Code Playgroud)
它总是会调用Original方法.如何调用扩展方法.
我从https://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx上读到,基本类型上具有相同名称和签名的扩展方法永远不会被调用,但是"覆盖"了什么呢?扩展方法本身:
using System;
using System.Linq;
using System.Collections.Generic;
namespace ConsoleApplication1
{
public class Program
{
public static void Main(string[] args)
{
var query = (new[] { "Hans", "Birgit" }).Where(x => x == "Hans");
foreach (var o in query) Console.WriteLine(o);
}
}
public static class MyClass
{
public static IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
foreach (var obj in source)
if (predicate(obj)) yield return obj;
}
};
}
Run Code Online (Sandbox Code Playgroud)
当我调试这个程序时,我会遇到我自己的扩展方法而不是System.Linq提供的那个(尽管包含了名称空间).我是否遗漏了任何内容,或者扩展方法是否优先考虑?