MethodBase.IsFinal Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene un valor que indica si este método es final
.
public:
property bool IsFinal { bool get(); };
public bool IsFinal { get; }
member this.IsFinal : bool
Public ReadOnly Property IsFinal As Boolean
Valor de propiedad
true
si este método es final
; en caso contrario, false
.
Implementaciones
Ejemplos
En el ejemplo siguiente se muestra false
para IsFinal
, lo que puede llevar a pensar que MyMethod es reemplazable. El código se imprime false
aunque MyMethod no está marcado virtual
y, por tanto, no se puede invalidar.
using namespace System;
using namespace System::Reflection;
public ref class MyClass
{
public:
void MyMethod(){}
};
int main()
{
MethodBase^ m = MyClass::typeid->GetMethod( "MyMethod" );
Console::WriteLine( "The IsFinal property value of MyMethod is {0}.", m->IsFinal );
Console::WriteLine( "The IsVirtual property value of MyMethod is {0}.", m->IsVirtual );
}
using System;
using System.Reflection;
public class MyClass
{
public void MyMethod()
{
}
public static void Main()
{
MethodBase m = typeof(MyClass).GetMethod("MyMethod");
Console.WriteLine("The IsFinal property value of MyMethod is {0}.", m.IsFinal);
Console.WriteLine("The IsVirtual property value of MyMethod is {0}.", m.IsVirtual);
}
}
Imports System.Reflection
Public Class MyClass1
Public Sub MyMethod()
End Sub
Public Shared Sub Main()
Dim m As MethodBase = GetType(MyClass1).GetMethod("MyMethod")
Console.WriteLine("The IsFinal property value of MyMethod is {0}.", m.IsFinal)
Console.WriteLine("The IsVirtual property value of MyMethod is {0}.", m.IsVirtual)
End Sub
End Class
Comentarios
Si el método virtual está marcado final
como , no se puede invalidar en clases derivadas. El método virtual invalidado se puede marcar final
mediante la palabra clave sealed en C#, NotOverridable en Visual Basic o palabra clave sealed en C++/CLI. El compilador también puede marcar final
implícitamente el método . Por ejemplo, un método puede definirse como no virtual en el código, pero implementa un método de interfaz. Common Language Runtime requiere que todos los métodos que implementan miembros de interfaz se marquen como virtual
; por lo tanto, el compilador marca el método virtual final
.
Puede usar esta propiedad, junto con la IsVirtual propiedad , para determinar si un método se puede invalidar. Para que un método se pueda invalidar, la IsVirtual propiedad debe ser true
y IsFinal
debe ser false
. Para establecer con certeza si un método se puede invalidar, use código como este:
if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)
If MethodInfo.IsVirtual AndAlso Not MethodInfo.IsFinal Then
Si IsVirtual
es o IsFinal
es true``false
, el método no se puede invalidar.