public class A
{
public virtual string Foo ()
{
return "A";
}
} public class B : A
{
public override string Foo()
{
return "B";
}
} public class C : B
{
public override string Foo()
{
return "C";
} public string Test()
{
return base.Foo(); //这句话是调用父类。如何改为调用父类的父类
}
}调用代码:
C obj = new C();
string s= obj.Test(); //此处返回"B",目标是想让其返回"A"。
{
public virtual string Foo ()
{
return "A";
}
} public class B : A
{
public override string Foo()
{
return "B";
}
} public class C : B
{
public override string Foo()
{
return "C";
} public string Test()
{
return base.Foo(); //这句话是调用父类。如何改为调用父类的父类
}
}调用代码:
C obj = new C();
string s= obj.Test(); //此处返回"B",目标是想让其返回"A"。
你想实现基类的,直接继承就可以 public class A
{
public string Foo()
{
return "A";
}
} public class B : A
{
} public class C : B
{
public string Test()
{
return base.Foo(); //这句话是调用父类。如何改为调用父类的父类
}
}
class A
{
public virtual void Func()
{
Console.WriteLine("A");
}
}
class B:A
{
public new void Func()
{
Console.WriteLine("B");
}
}
class C:B
{
public void Func()
{
A a = this as C;
a.Func();
}
}
{
((A)this).Foo();
}
这个会返回C类的Foo: “C"
这个应该是网上抄的。B类把virtual改成new,那就失去多态的一些重要特性了。
那你觉得多态不是这么用,又是怎么用的?
TextBox继续于TextBoxBase,TextBoxBase又继续于Control。这不就是这个道理吗。比如想定义一个类直接继承于TextBox,那自然是打算用TextBox现有的一些方法属性等(但某些特殊时候又不得不调用Control类的方法,比如BackColor),如果直接继承自Control,那就失去意义了。
public class A
{
protect virtual bool Test()
{
return true;
}
}public class B : A
{
protect override bool Test()
{
return false;
}
}public class C : B
{
public bool GetResult()
{
return Test();
}
}B直接返回false
让你接触不到A
你怎么可能从A那里拿到true呢?