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çãoClass
.Modificadores combinados. Você não pode especificar
MustInherit
junto comNotInheritable
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: