Partilhar via


MethodBase.IsFinal Propriedade

Definição

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.

Aplica-se a

Confira também