c# - 在子类的子类中调用方法
问题描述
我有三个班。首先是抽象的,它被子类继承,子类又被继承。如何从抽象类中的第三类调用方法?
示例代码:
public abstract class DoSth
{
public void DoSomething()
{
Console.WriteLine("I'm doing something");
this.DoSomethingBigger();
}
protected abstract void DoSomethingBigger();
}
public class Writer : DoSth
{
protected override void DoSomethingBigger()
{
Console.WriteLine("I'm writting");
}
}
public class BookWriter : Writer
{
protected new void DoSomethingBigger()
{
Console.WriteLine("I'm writting a book");
}
}
如何DoSomethingBigger()
从BookWriter
班级打电话?当我创建一个实例BookWriter
并调用DoSomething()
我的输出时
I'm doing something
I'm writting
但我想要
I'm doing something
I'm writting a book
解决方案
通过使用关键字标记您的DoSomethingBigger
方法,new
您可以隐藏初始DoSomethingBigger
方法而不是覆盖它。
您应该以这种方式重写代码以使其正常工作
public abstract class DoSth
{
public void DoSomething()
{
Console.WriteLine("I'm doing something");
this.DoSomethingBigger();
}
protected abstract void DoSomethingBigger();
}
public class Writer : DoSth
{
protected override void DoSomethingBigger()
{
Console.WriteLine("I'm writting");
}
}
public class BookWriter : Writer
{
protected override void DoSomethingBigger()
{
Console.WriteLine("I'm writting a book");
}
}
推荐阅读
- c++ - 重新排序 QTreeWidgetItem 后 QTreeWidgetItem 中的 QWidget 消失
- angular - ReferenceError:找不到变量:区域
- regex - 正则表达式查找和替换小写大写
- c++ - 如何从 int 一次写入一个字节的文件?C++
- linux - 向 docker 添加新用户并限制其权限
- cmd - 将 lua.exe 添加到我的系统路径
- scala - What is the efficient way to remove subsets from a List[List[String]]?
- r - 如何并行化代码以对 R 中的列表进行排序和求和?
- git - 如何恢复 git 冲突
- javascript - 在 HTML Escape Javascript 字符串之后是否需要“清理”?