-1

如果我有这个代码:

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而不Bar使用普通方法?

4

2 回答 2

4

无论如何调用 Foo 内部 Bar 中定义的本地函数而不使 Bar 成为正常方法?

没有按设计的方式。这就是“本地”的意思。local只能通过声明位置中的代码通过 名称访问;这就是为什么他们被称为“本地人”。

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

于 2018-08-16T21:37:24.630 回答
-1

是的,您可以像使用任何 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

链接到 DotNetFiddle

于 2018-08-16T21:52:47.030 回答