今天,在c#中实现一些测试类时,我在c#中讨论了有关继承(和接口)的一些问题.下面我有一些示例代码来说明我的问题.
interface ILuftfahrzeug
{
void Starten();
}
class Flugzeug : ILuftfahrzeug
{
public void Starten()
{
Console.WriteLine("Das Flugzeug startet, "+Dings());
}
protected string Dings()
{
return "Flugzeug Dings";
}
}
class Motorflugzeug : Flugzeug, ILuftfahrzeug
{
public new void Starten()
{
Console.WriteLine("Das Motorflugzeug startet, "+Dings());
}
protected new string Dings()
{
return "Motorflugzeug Dings";
}
}
class InterfaceUndVererbung
{
static void Main(string[] args)
{
//Motorflugzeug flg = new Motorflugzeug(); // case1: returns "Das Motorflugzeug startet, Motorflugzeug Dings"
//Flugzeug flg = new Motorflugzeug(); // case2: returns "Das Flugzeug startet, Flugzeug Dings"
ILuftfahrzeug flg = new Motorflugzeug(); // case3: returns "Das Motorflugzeug startet, Motorflugzeug Dings"
// if Motorflugzeug implements ILuftfahrzeug explicitly,
// otherwise "Das Motorflugzeug startet, Motorflugzeug Dings"
flg.Starten();
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
这些是我的问题:
1:你重新声明方法(new); 如果override它应该工作.该new中断任何多态行为.
2:你正在重新实现界面; 这确实称为最高的实施.再次,override将解决这个问题.
class Flugzeug : ILuftfahrzeug {
public virtual void Starten() {
Console.WriteLine("Das Flugzeug startet, " + Dings());
}
protected virtual string Dings() {
return "Flugzeug Dings";
}
}
class Motorflugzeug : Flugzeug {
public override void Starten() {
Console.WriteLine("Das Motorflugzeug startet, " + Dings());
}
protected override string Dings() {
return "Motorflugzeug Dings";
}
}
Run Code Online (Sandbox Code Playgroud)