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 podría 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 como final
, no se puede invalidar en clases derivadas. El método virtual invalidado se puede marcar final
mediante la palabra clave sealed en C#, La palabra clave NotOverridable en Visual Basic o la palabra clave sealed en C++/CLI. El compilador también puede marcar final
implícitamente el método . Por ejemplo, un método podría 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, IsVirtual la propiedad debe ser y IsFinal
debe ser false
true
. 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.