c# - 如何从父类的基类调用方法
问题描述
我可以从祖父母类中调用方法吗?如果可以,如何调用?
我正在尝试做这样的事情:
class A {
void foo() {
// Do something...
}
}
class B : A {
override void foo() {
// Do something else...
}
}
class C : B {
override void foo() {
// Call A's foo method
// Then do something else
}
}
解决方案
一种方法是使用显式接口实现class A
:
这使您可以A
从内部C
和外部代码调用 's implementation C
(通过转换为IBob
first)。
using System;
namespace ConsoleApp4
{
interface IBob
{
void foo();
}
class A : IBob
{
void IBob.foo()
{
Console.WriteLine("A");
}
public virtual void foo()
{
((IBob)this).foo();
}
}
class B : A
{
public override void foo()
{
Console.WriteLine("B");
}
}
class C : B
{
public override void foo()
{
Console.WriteLine("C");
// Writes B
base.foo();
// Writes A
((IBob)this).foo();
}
}
public class Program
{
static void Main(string[] args)
{
var sally = new C();
sally.foo(); // A B C
IBob sally2 = sally;
sally2.foo(); // A
Console.ReadLine();
}
}
}
推荐阅读
- python - 替代 groupby + cumprod (Python)?
- angular - 如何从 websocket 返回值?
- r - GBM 每次在同一样本上返回不同的结果。(R)
- flutter - 从函数返回值并恢复 onTap
- javascript - 如何将悬停效果应用于具有相同 css 类的其他元素?
- c# - 如何在我的 AreaPlan 中引用一个区域?
- perl - 如何在一个语句中声明和分配具有出现次数的哈希
- nlp - 如何使用源代码类 RobertaSelfAttention(nn.Module):
- javascript - 节点js未定义的mongodb连接
- web-scraping - 错误:使用 Puppeteer 进行网页抓取 - 无法读取未定义的属性“getProperty”