tag propiedad name c# .net inheritance

propiedad - summary param name c#



es posible marcar el método reemplazado como final (4)

Los métodos individuales se pueden marcar como sellados, lo que es en general equivalente a marcar un método como final en Java. Entonces, en tu ejemplo, tendrías:

class B : A { override sealed void DoAction() { // implementation } }

En C #, ¿es posible marcar un método virtual anulado como final para que los implementadores no puedan anularlo? ¿Cómo lo haría?

Un ejemplo puede hacer que sea más fácil de entender:

class A { abstract void DoAction(); } class B : A { override void DoAction() { // Implements action in a way that it doesn''t make // sense for children to override, e.g. by setting private state // later operations depend on } } class C: B { // This would be a bug override void DoAction() { } }

¿Hay alguna forma de modificar B para evitar que otros niños C anulen DoAction, ya sea en tiempo de compilación o en tiempo de ejecución?


Necesitas "sellado".


Puede marcar el método como sealed .

http://msdn.microsoft.com/en-us/library/aa645769(VS.71).aspx

class A { public virtual void F() { } } class B : A { public sealed override void F() { } } class C : B { public override void F() { } // Compilation error - ''C.F()'': cannot override // inherited member ''B.F()'' because it is sealed }


Sí, con "sellado":

class A { abstract void DoAction(); } class B : A { sealed override void DoAction() { // Implements action in a way that it doesn''t make // sense for children to override, e.g. by setting private state // later operations depend on } } class C: B { override void DoAction() { } // will not compile }