是使用virtual
class C1 {
public virtual void MyMethod()
{
}
}
class C2: C1 {
public override void MyMethod()
{
}
}
声明的方法吗?
例如
MyMethod
C2
中定义的virtual
作为C1
中定义的方法保留C2
吗?即它是否可以被派生自<div class="Slideshow_carousel-wrapper container-fluid">
<span class="Slideshow-ctl-L" onclick="carousel_left()"></span>
<div class="carousel slide" data-ride="carousel" ... </div>
<span class="Slideshow-ctl-R" onclick="carousel_right()"></span>
</div>
<div class="container-fluid Slideshow_progress-bar">
<ul id="slideshow_progress" class="Slideshow_progress"></ul>
</div>
的类中的方法覆盖?
如果没有,我该如何将其设为虚拟?
答案 0 :(得分:4)
是的,您可以覆盖它,但是一旦seal
它,那么如果您从密封版本派生,则不能再覆盖它:
public class C1 {
public virtual void MyMethod() {
}
}
public class C2 : C1 {
public sealed override void MyMethod() {
base.MyMethod();
}
}
下面不起作用:
public class C3 : C2 {
// here you will no longer be able to override it
}
但如果其他类派生C1
,那仍然可以。
答案 1 :(得分:1)
是。您可以在后续子类中根据需要继续override
次。
从C#5.0规范(我的重点):
可以在派生类中重写虚方法。当一个 实例方法声明包括一个override修饰符,即方法 覆盖具有相同签名的继承虚拟方法。而 虚方法声明引入了一个新方法,一个覆盖 方法声明专门用于现有的继承虚拟方法 提供该方法的新实现。
第10.6.5节讨论了CodingYoshi所指的内容,但它显示了一个可以做到的例子。