调用 child child 中的方法 class
Call a method in child of child class
我有三个 class。首先是抽象,被child继承,class又被继承。如何从抽象的第三个class调用方法?
示例代码:
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");
}
}
如何从 BookWriter
class 调用 DoSomethingBigger()
?
当我创建 BookWriter
的实例并调用 DoSomething()
时,我的输出是
I'm doing something
I'm writting
但我想要
I'm doing something
I'm writting a book
通过使用 new
关键字标记 DoSomethingBigger
方法,您可以隐藏初始 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");
}
}
您没有重写第 3 个 class 中的方法,您基本上是在创建一个基础一无所知的全新方法。有关详细信息,请参阅 here。这与将 BookWriter
中的方法名称更改为完全不同的名称(例如 DoSomethingElseAltogether()
)没有什么不同,现在更明显的是您不能从基础 class.[=14= 中调用它]
相反,您应该在第三个 class:
中覆盖
public class BookWriter : Writer
{
protected override void DoSomethingBigger()
{
Console.WriteLine("I'm writting a book");
}
}
我有三个 class。首先是抽象,被child继承,class又被继承。如何从抽象的第三个class调用方法?
示例代码:
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");
}
}
如何从 BookWriter
class 调用 DoSomethingBigger()
?
当我创建 BookWriter
的实例并调用 DoSomething()
时,我的输出是
I'm doing something
I'm writting
但我想要
I'm doing something
I'm writting a book
通过使用 new
关键字标记 DoSomethingBigger
方法,您可以隐藏初始 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");
}
}
您没有重写第 3 个 class 中的方法,您基本上是在创建一个基础一无所知的全新方法。有关详细信息,请参阅 here。这与将 BookWriter
中的方法名称更改为完全不同的名称(例如 DoSomethingElseAltogether()
)没有什么不同,现在更明显的是您不能从基础 class.[=14= 中调用它]
相反,您应该在第三个 class:
中覆盖public class BookWriter : Writer
{
protected override void DoSomethingBigger()
{
Console.WriteLine("I'm writting a book");
}
}