相关疑难解决方法(0)

如何调用与现有方法同名的扩展方法?

可能重复:
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方法.如何调用扩展方法.

c# extension-methods

23
推荐指数
3
解决办法
7514
查看次数

扩展方法优先级

我从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提供的那个(尽管包含了名称空间).我是否遗漏了任何内容,或者扩展方法是否优先考虑?

c# extension-methods

4
推荐指数
2
解决办法
901
查看次数

标签 统计

c# ×2

extension-methods ×2