代码之家  ›  专栏  ›  技术社区  ›  AustinWBryan ravenspoint

如何在重写方法中使用基方法的局部函数

  •  -1
  • AustinWBryan ravenspoint  · 技术社区  · 6 年前

    public virtual void Foo()
    {
        void Bar()
        {
            // do important stuff for Foo
        }
    }
    
    // In a child class: 
    public override void Foo()
    {
        Bar();        // Doesn't work
        base.Bar();   // Also doesn't work
    }
    

    是否仍要调用中定义的本地函数 Bar Foo 不做 正常的方法?

    2 回复  |  直到 6 年前
        1
  •  4
  •   Eric Lippert    6 年前

    在没有使Bar成为普通方法的情况下,是否可以调用Foo内部Bar中定义的本地函数?

    这就是“本地”的意思。 一个 地方的 只能通过 所以他们被称为“本地人”。

    有什么办法吗?当然,你可以用反射、反编译和不安全的代码等做各种恶作剧。请不要这样做。这些是编译器的实现细节;不要试图对它们进行反向工程,当然也不要依赖于编译器团队做出的任何永久性的实现选择!

        2
  •  -1
  •   John Wu    6 年前

    是的,您可以像处理任何lambda表达式一样将委托传递给它。不,这不会破坏任何“规则”,我们总是用Javascript,在模块模式下,或者不管它叫什么。

    public class MyBase
    {
        protected Action Foo()
        {
            return Local;
    
            void Local()
            {
                Console.WriteLine("Hello world");
            }
        }
    }
    
    public class MyDerived : MyBase
    {
        public void HelloWorld()
        {
            var f = Foo();
            f();
        }
    }
    
    
    public class Program
    {
        public static void Main()
        {
            var o = new MyDerived();
            o.HelloWorld();
        }
    }
    

    输出:

    Hello world
    

    Link to DotNetFiddle