9

これが私のクラスで、このメソッドを子クラスでオーバーライドしたくないのですが、どうすればこの動作を達成できますか?

class A 
{ 
   public virtual void demo() 
   { 
   } 
} 

class B : A 
{ 
   public override void demo() 
   { 
   } 
} 

// when Class B be inherited in C, methods can be overridden further, 
// but I don't want the method to be overridden further.
class C : B 
{ 

}
4

2 に答える 2

11

sealed修飾子が必要なだけです:

public sealed override void demo() 
{ 
    // Whatever implementation
} 

(もちろん、通常は .NET の規則に準拠した名前になると思います。)

自分で動作を変更せずにメソッドがオーバーライドされないようにしたい場合は、オーバーライドする必要がありますが、以前の動作を明示的に呼び出す必要があります。

public sealed override void demo() 
{ 
    base.demo();
} 

メソッド (またはプロパティ) に適用する場合は、 と組み合わせてのみsealed適用できることに注意してください。override

于 2013-06-24T06:04:27.990 に答える
9

sealed' ' 修飾子を前に置くoverride void demo()

class A 
{ 
    public virtual void demo() 
    { 
    } 
} 

class B:A 
{ 
    public sealed override void demo() 
    { 
    } 
} 

//B can be inherited in C but demo() method can not be overriden further 
class C:B 
{ 

}
于 2013-06-24T06:04:38.580 に答える