My


Como eu já suspeitava, as classes My (disponíveis na versão 2005 do Visual Basic .NET), que são responsáveis por criar uma espécie de atalho para recursos utilizados com muita frequencia e evitar a escrita de “muito” código para uma determinada funcionalidade, na verdade apenas encapsulam códigos que já são de nosso conhecimento, como por exemplo o método ReadAllText da classe FileSystemProxy (que é na verdade um proxy para a classe FileSystem do Namespace System.IO). Para ler o conteúdo de um arquivo qualquer, podemos agora fazer simplesmente:

      Dim s As String = My.Computer.FileSystem.ReadAllText(“TextFile1.txt”)

Quando compilamos o projeto VB.NET, ele embute um Namespace chamado TeuProjeto.My, onde dentro dele, é criado classes do tipo Friend, que são vistas somente dentro daquele Assembly e uma delas chama-se MyProject. Dentro desta classe, voce terá objetos estáticos que representam os teus recursos, como por exemplo: MyApplication, MyComputer, MyForms, etc. O código é semelhante à este:

      Public Shared ReadOnly Property Application As MyApplication
      Public Shared ReadOnly Property Computer As MyComputer
      Public Shared ReadOnly Property Forms As MyForms
      Public Shared ReadOnly Property WebServices As MyWebServices

Onde para cada um desses objetos, existem também um objeto estático Read-Only, que é uma classe genérica do tipo ThreadSafeObjectProvider, que recebe qualquer um dos objetos (por isso é genérica) acima e tem a finalidade de recuperar ou criar a instância do objeto que lhe é passada:

      Private Shared ReadOnly m_AppObjectProvider As ThreadSafeObjectProvider(Of MyApplication)
      Private Shared ReadOnly m_ComputerObjectProvider As ThreadSafeObjectProvider(Of MyComputer)
      Private Shared m_MyFormsObjectProvider As ThreadSafeObjectProvider(Of MyForms)
      Private Shared ReadOnly m_MyWebServicesObjectProvider As ThreadSafeObjectProvider(Of MyWebServices)

Dentro da classe Friend MyProject, temos uma propriedade estática Read-Only para cada um de nossos recursos, que chamam a propriedade GetInstance (e se não estou enganado, usa-se a pattern Singleton para ter apenas uma única instância deste objeto) do ThreadSafeObjectProvider para o objeto em questão, no nosso caso, do MyComputer.

      Public Shared ReadOnly Property Computer As MyComputer
            Get
                  Return MyProject.m_ComputerObjectProvider.GetInstance
            End Get
      End Property

Depois da instância do objeto que queremos foi recuperada (ou criada), voltamos um pouco, ao nosso método ReadAllText da classe FileSystem, e se visualizarmos o código deste método, teremos algo bem familiar:

      Public Shared Function ReadAllText(ByVal file As String, ByVal encoding As Encoding) As String
            Dim text1 As String
            Dim reader1 As StreamReader = Nothing
            Try 
                  reader1 = New StreamReader(file, encoding, True)
                  text1 = reader1.ReadToEnd
            Finally
                  If (Not reader1 Is Nothing) Then
                        reader1.Close
                  End If
            End Try

            Return text1
      End Function

Só não consigo entender, porque um recurso tão interessante como este, não poderia também ser incorporado no C#. Talvez porque os C# developers são “gurus” demais, e ao invés de utilizar o My, criam um wrapper próprio. 😛

Update:
Há sim agora uma opção para as classes My no C#. Eis aqui a explicação.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s