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
}