Membros Compartilhados


Como sabemos membros compartilhados de uma classe, são membros que conseguimos acessar sem a necessidade da criação da instancia desta classe, podendo assim chamarmos o método ou propriedade e já obtemos o seu valor (ou uma Expcetion :P).

Algo que venho me atentando é que é perfeitamente possível acessar um membro compartilhado a partir de uma instancia de uma classe no VB.NET, mas no C# isso já não é possível. Independentemente disso, o código final gerado é o mesmo, ou seja, tanto o código escrito em VB.NET quanto o código escrito em C# “chamam” o membro compartilhado diretamente através da sua classe e não da instancia criada. Abaixo a prova:

[ VB.NET ]

     Public Class Teste
         Public Shared Function MeuNome() As String
             Return “Israel Aéce”
         End Function
         Public Function
Profissao() As String
             Return “Developer”
         End Function
     End Class

     Module Module1
         Sub Main()
             Dim t As New Teste
             Console.WriteLine(t.MeuNome())
             Console.WriteLine(t.Profissao())
         End Sub
     End Module

[ C# ]

      public class Teste{ 
           public static string MeuNome(){
                return “Israel Aéce”;
           }
           public string Profissao(){
                return “Developer”;
           } 
      }

      static void Main(string[] args){
           Teste t = new Teste();
           Console.WriteLine(Teste.MeuNome());
           Console.WriteLine(t.Profissao());
      }

Se fizermos o teste, veremos que nem será possível chamar o método compartilhado através de um instancia no C#, não sequer aparecendo no Intellisense, mas no VB.NET, isso é permitido pelo compilador. Finalmente o código gerado para o código acima é identico em ambas as linguagens:

      Public Shared Sub Main()
           Dim teste1 As New Teste
           Console.WriteLine(Teste.MeuNome)
           Console.WriteLine(teste1.Profissao)
     End Sub

Já que independentemente da linguagem, o código final gerado é identico, será isso um truque do compilador do VB.NET? De toda forma, não vejo motivo pelo qual a MS possibilita isso no VB.NET. Talvez porque o mesmo é considerado como uma linguagem de programação mais voltada para pessoas sem experiencia?

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