MustInherit (Visual Basic)

Especifica que uma classe só pode ser usada como classe base e que você não pode criar um objeto diretamente dela.

Comentários

A finalidade de uma classe base (também conhecida como classe abstrata) é definir a funcionalidade que é comum a todas as classes derivadas dela. Isso evita que as classes derivadas tenham de redefinir os elementos comuns. Em alguns casos, essa funcionalidade comum não é completa o suficiente para tornar um objeto utilizável e cada classe derivada define a funcionalidade ausente. Nesse caso, você deseja que o código de consumo crie objetos somente das classes derivadas. Você usa MustInherit na classe base para impor isso.

Outro uso de uma classe MustInherit é restringir uma variável a um conjunto de classes relacionadas. Você pode definir uma classe base e derivar todas essas classes dela. A classe base não precisa fornecer nenhuma funcionalidade comum a todas as classes derivadas, mas pode servir como um filtro para atribuir valores a variáveis. Se o código de consumo declarar uma variável como a classe base, o Visual Basic permitirá que você atribua apenas um objeto de uma das classes derivadas a essa variável.

O .NET Framework define várias classes MustInherit, entre elas Array, Enum e ValueType. ValueType é um exemplo de uma classe base que restringe uma variável. Todos os tipos de valor derivam de ValueType. Se você declarar uma variável como ValueType, poderá atribuir apenas tipos de valor a essa variável.

Regras

  • Contexto da declaração. Você só pode usar MustInherit em uma instrução Class.

  • Modificadores combinados. Você não pode especificar MustInherit junto com NotInheritable na mesma declaração.

Exemplo

O exemplo a seguir ilustra a herança forçada e a substituição forçada. A classe base shape define uma variável acrossLine. As classes circle e square derivam de shape. Elas herdam a definição de acrossLine, mas devem definir a função area porque esse cálculo é diferente para cada tipo de forma.

Public MustInherit Class shape
    Public acrossLine As Double
    Public MustOverride Function area() As Double
End Class
Public Class circle : Inherits shape
    Public Overrides Function area() As Double
        Return Math.PI * acrossLine
    End Function
End Class
Public Class square : Inherits shape
    Public Overrides Function area() As Double
        Return acrossLine * acrossLine
    End Function
End Class
Public Class consumeShapes
    Public Sub makeShapes()
        Dim shape1, shape2 As shape
        shape1 = New circle
        shape2 = New square
    End Sub
End Class

Você pode declarar shape1 e shape2 como sendo do tipo shape. No entanto, não é possível criar um objeto de shape porque ele não tem a funcionalidade da função area e está marcado como MustInherit.

Como elas são declaradas como shape, as variáveis shape1 e shape2 são restritas a objetos das classes derivadas circle e square. O Visual Basic não permite que você atribua nenhum outro objeto a essas variáveis, o que oferece um alto nível de segurança de tipos.

Uso

O modificador MustInherit pode ser usado neste contexto:

Instrução Class

Confira também