如何在重写方法中使用基方法的局部函数
How to use base method's local function's in overriden method
如果我有这个代码:
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
}
是否可以在 Foo
内部调用 Bar
中定义的局部函数而不使 Bar
成为普通方法?
Is there anyway to call the local function defined in Bar inside of Foo without making Bar a normal method?
没有设计使然的方法。 这就是 "local" 的意思。 local 只能通过 location[=19= 中的代码通过名称访问] 的声明;这就是为什么他们被称为 "locals".
有"any"方法吗?当然,您可以使用反射和反编译以及不安全代码等进行各种恶作剧。请不要。这些是编译器的实现细节;不要试图对它们进行逆向工程,当然也不要依赖编译器团队做出的任何永久性实现选择!
是的,您可以像处理任何 lambda 表达式一样将委托传递给它。不,这不会破坏任何 "rules," 并且我们一直在 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
如果我有这个代码:
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
}
是否可以在 Foo
内部调用 Bar
中定义的局部函数而不使 Bar
成为普通方法?
Is there anyway to call the local function defined in Bar inside of Foo without making Bar a normal method?
没有设计使然的方法。 这就是 "local" 的意思。 local 只能通过 location[=19= 中的代码通过名称访问] 的声明;这就是为什么他们被称为 "locals".
有"any"方法吗?当然,您可以使用反射和反编译以及不安全代码等进行各种恶作剧。请不要。这些是编译器的实现细节;不要试图对它们进行逆向工程,当然也不要依赖编译器团队做出的任何永久性实现选择!
是的,您可以像处理任何 lambda 表达式一样将委托传递给它。不,这不会破坏任何 "rules," 并且我们一直在 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