MethodBase.IsFinal Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém um valor que indica se esse método é final
.
public:
property bool IsFinal { bool get(); };
public bool IsFinal { get; }
member this.IsFinal : bool
Public ReadOnly Property IsFinal As Boolean
Valor da propriedade
true
se esse método for final
; caso contrário, false
.
Implementações
Exemplos
O exemplo a seguir é false
exibido para IsFinal
, o que pode levar você a pensar que MyMethod é substituível. O código imprime false
mesmo que MyMethod não esteja marcado virtual
e, portanto, não possa ser substituído.
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
Comentários
Se o método virtual estiver marcado como final
, ele não poderá ser substituído em classes derivadas. O método virtual substituído pode ser marcado final
usando o palavra-chave lacrado em C#, Palavra-chave NotOverridable no Visual Basic ou palavra-chave lacrado em C++/CLI. O método também pode ser marcado final
implicitamente pelo compilador. Por exemplo, um método pode ser definido como não virtual em seu código, mas implementa um método de interface. O Common Language Runtime requer que todos os métodos que implementam membros da interface devem ser marcados como virtual
; portanto, o compilador marca o método virtual final
.
Você pode usar essa propriedade, em conjunto com a IsVirtual propriedade , para determinar se um método é substituível. Para que um método seja substituível, IsVirtual a propriedade deve ser true
e IsFinal
a propriedade deve ser false
. Para estabelecer com certeza se um método é substituível, use um código como este:
if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)
If MethodInfo.IsVirtual AndAlso Not MethodInfo.IsFinal Then
Se IsVirtual
for false
ou IsFinal
for true
, o método não poderá ser substituído.