É possível ter uma propriedade do tipo COM objeto


8

Estou desenvolvendo um suplemento de COM para Microsoft Excel, usando VB.Net. Eu escrevi uma classe para representar uma planilha que contém certos elementos. Digamos, por exemplo, que ele tenha um ListObject. Eu crio uma propriedade para o ListObject assim:

Public Class MySheet

Private myTable as Excel.ListObject
Public Property Table() As Excel.ListObject
    Get
        Return myTable
    End Get
    Set(ByVal value As Excel.ListObject)
        myTable = value
    End Set
End Property

Em seguida, tenho propriedades (na classe MySheet) que representam atributos do ListObject, por exemplo:

Private myTableStyle As String
Public Property TableStyle As String
    Get
        Return myTableStyle
    End Get
    Set(ByVal value As String)
        myTableStyle = value
        Me.Table.TableStyle = value
    End Set
End Property

A razão pela qual eu o configurei dessa maneira é que, no meu código principal, não precise atualizar duas propriedades toda vez que desejar alterar o estilo (a propriedade TableStyle da classe MySheet E a propriedade TableSTyle do ListObject). Então, no meu código principal, posso ter:

Dim MySheetObject As MySheet = New MySheet()
MySheetObject.Table = SomeListObject
MySheetObject.TableStyle = "TableStyleMedium4"

Essa última linha, em seguida, armazena o valor da string como uma propriedade do objeto MySheet e altera a propriedade TableStyle do ListObject no Excel.

Tudo bem ou está quebrando algum princípio de codificação?

Respostas:


1

Você pode ter outros motivos para "armazenar em cache" o TableStylelocal, mas, caso contrário, pode ser visto como "otimização prematura". A propriedade pode ser implementada como:

Public Property TableStyle As String
    Get
        Return Me.Table.TableStyle
    End Get
    Set(ByVal value As String)
        Me.Table.TableStyle = value
    End Set
End Property

1

Considerando que este é um programa que está inextrincavelmente vinculado ao Excel, acho relativamente razoável tratar um Excel.ListObject da mesma maneira que você normalmente trataria um objeto .Net neste caso. vale a complexidade adicional de ter um benefício tão pequeno quanto não precisar de duas propriedades separadas (mas isso não tem nada a ver com o fato de ser um objeto COM).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.