Ir para conteúdo
Fórum Script Brasil
  • 0

Virtual, Static


Guest --Bruno --

Pergunta

Guest --Bruno --

Olá galera, estou aprendendo c#, e me deparei com algumas duvidas, vou coloca-las em toppicos aqui,e rezar pra alguém me dar uma explicação mais fundo do que eu já conheco, muito obrigado ...

*Static -> Bom galera, eu sei que quando eu declaro um 'public static Variavel' esta variavel fica "estatica" para todo o programa ou seja, se eu declaro ela na classe principal do meu programa 'public static formPrincipal Nome' eu vou podela acessar do meu projeto inteiro usando Program.Nome para fazer alguma modificação ou algo assim...mais não é só iso, certo ? alguempoderia me dar uma explicação certo do que ela faz ?

*Virtual -> Bom, eu sei que é usado quando se quer usar polimorfismo, por exemplo:

public class Pai{
         public virtual void m(){
             Console.WriteLine("Pai");
         }
     }
     
     public class Filha: Pai{
         public override void m(){
             Console.WriteLine("Filha");
         }
     }
     
     public class MainClass{
         public static void Main(String[] args){
             Filha filha = new Filha();
             Pai pai = filha;
             filha.m();
             pai.m();
         }
     }

...Mais é só pra isso que serve o virtual ? existe mais alguma forma de eu utilizalo ?

obrigado.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Você deu o exemplo de um objeto estático, mas métodos também podem ser estáticos. Desta maneira você não precisa criar um objeto de determinada classe para usar seus métodos. O método Show() da classe MessageBox é um exemplo de método estático.

Em relação à métodos virtuais, você tem que conhecer classes abstratas e interfaces para entender melhor o porque deles existirem. De uma maneira simples, um método virtual é um método que você quer que exista na classe mas que a sua implementação (código) seja definida apenas em uma classe filha. Vamos supor que a classe Automóvel tenha um método virtual chamado MudarMarcha. Você pode então, herdando desta, criar uma classe Chevette cujo método MudarMarcha aceite até a 4ª marcha e uma classe Vectra, cujo mesmo método aceite até a 5ª marcha.

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest André Luís Duarte
Você deu o exemplo de um objeto estático, mas métodos também podem ser estáticos. Desta maneira você não precisa criar um objeto de determinada classe para usar seus métodos. O método Show() da classe MessageBox é um exemplo de método estático.

Em relação à métodos virtuais, você tem que conhecer classes abstratas e interfaces para entender melhor o porque deles existirem. De uma maneira simples, um método virtual é um método que você quer que exista na classe mas que a sua implementação (código) seja definida apenas em uma classe filha. Vamos supor que a classe Automóvel tenha um método virtual chamado MudarMarcha. Você pode então, herdando desta, criar uma classe Chevette cujo método MudarMarcha aceite até a 4ª marcha e uma classe Vectra, cujo mesmo método aceite até a 5ª marcha.

Certo? ;)

Graymalkin

Só complementando a ótima explicação, eu tive uma necessidade prática aqui na empresa. Quando declaro um atributo static, este atributo pertence à classe, ou seja ele existe independente desta ser ou não instanciada. Criei uma classe que manipula os clientes no meu sistema, só que eu preciso, em alguns processamentos, conhecer o total de clientes que eu possuo. Poderia ter criado um atributo na classe que contenha esse valor para fazer isso, o problema é que se um cliente for inserido ou removido enquanto estiver usando as instâncias, teria que ir em cada uma e atualizar este valor. Como todas as instâncias (objetos) da minha classe têm que enchergar o mesmo valor eu crio um atributo static para a classe. Todas as instâncias desta classe vão olhar para este atributo e enxergar o mesmo valor (porque o atributo é da classe), quando precisar atualizá-lo, faço uma vez só e todas as instâncias enchergaram o valor atualizado. Isso em C++.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Hey, só uma pergunta.. o que seria singleton ?

eu já ouvi falar muit dele, amis não sei o que é ...

muito obrigado pelas explciações galera.. já to me acostumando bastante com c#...

Link para o comentário
Compartilhar em outros sites

  • 0
Hey, só uma pergunta.. o que seria singleton ?

eu já ouvi falar muit dele, amis não sei o que é ...

Em termos práticos, singleton é quando você não instancia mais de uma vez o que seria um mesmo objeto. Por exemplo, você tem a classe Cliente, e tem a classe Pedido, em que uma das propriedades desta é o cliente que fez o pedido. Ao procurar pelo cliente é lhe retornado um objeto que representa o mesmo, vamos supor:

Cliente c = Cliente.Consultar("Bruno")
MessageBox.Show(c.Nome)
E ao acessar a propriedade Cliente de um objeto Pedido também é lhe retornado um objeto:
Pedido p = Pedido.Consultar(1)
MessageBox.Show(p.Cliente.Nome)

Usando singleton você garante que "c" e "p.Cliente" são o mesmo objeto, e não duas instâncias de Cliente com os mesmos dados. Desta maneira você poupa o trabalho de criar um objeto em duplicidade.

Certo? ;)

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

HUm, itnendi...

ateh tentei fazer algo aqui =)

aí Gray, eu tava vendo uns topicos por aí... e tavam falando que metodos estaticos, não são muito bons ... quer dizer..você pode me dizer suas desvantagens ?

e falarma tambem que variaveis publicas são "venenosas", isso é verdade ? (não sei em que sentido) ...

vlw aew, t+

Link para o comentário
Compartilhar em outros sites

  • 0
aí Gray, eu tava vendo uns topicos por aí... e tavam falando que metodos estaticos, não são muito bons ... quer dizer..você pode me dizer suas desvantagens ?

Não existe nenhuma desvantagem em se usar métodos estáticos. Pelo contrário, em alguns casos é bem melhor fazer isso. Imagine você ter que criar uma instância da classe só para usar um método que não tem nenhuma relação com a instância. Ao invés de...

MessageBox.Show("teste");
... você teria que fazer...
MessageBox m = new MessageBox();

m.Show("teste");
... ou ainda:
(new MessageBox()).Show("teste");

De todos os casos, o primeiro, com um método estático, é o melhor, sem dúvidas.

e falarma tambem que variaveis publicas são "venenosas", isso é verdade ? (não sei em que sentido) ...

Isso é só porque você não pode controlar o que o caboclo (ou você mesmo) vai colocar na variável e nem controlar o seu retorno. Quando você usa propriedades você tem este tipo de controle.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Thiago Bueno

Os métodos estáticos podem trazer problemas em caso de você trabalhar com threads...

já se for uma propriedade statica você tem q ter a conciencia q ela será compartilhada por todos os usuários da sua aplicação.

exemplo usuário1 muda o valor da propridade para 1 em seguida o usuário2 muda o valor para 2 consequentimente o usuário1 enxergará o valor 2.

Etendeu?

abc,

aí Gray, eu tava vendo uns topicos por aí... e tavam falando que metodos estaticos, não são muito bons ... quer dizer..você pode me dizer suas desvantagens ?

Não existe nenhuma desvantagem em se usar métodos estáticos. Pelo contrário, em alguns casos é bem melhor fazer isso. Imagine você ter que criar uma instância da classe só para usar um método que não tem nenhuma relação com a instância. Ao invés de...

MessageBox.Show("teste");
... você teria que fazer...
MessageBox m = new MessageBox();

m.Show("teste");
... ou ainda:
(new MessageBox()).Show("teste");

De todos os casos, o primeiro, com um método estático, é o melhor, sem dúvidas.

e falarma tambem que variaveis publicas são "venenosas", isso é verdade ? (não sei em que sentido) ...

Isso é só porque você não pode controlar o que o caboclo (ou você mesmo) vai colocar na variável e nem controlar o seu retorno. Quando você usa propriedades você tem este tipo de controle.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...