O Yahoo Respostas será encerrado em 4 de maio de 2021 (horário do leste) e, a partir de 20 de abril de 2021 (horário do leste), estará disponível somente para leitura. Não haverá alterações em outras propriedades ou serviços ou em sua conta do Yahoo. Você pode encontrar mais informações sobre o encerramento do Yahoo Respostas e como fazer para baixar seus dados nesta página de ajuda .

Qual a diferença entre uma struct e uma classe na programação?

Bom, na linguagem C usa structs, é uma coisa que eu usei bastante na época da faculdade kkk, e na linguagem C#, que é orientada a objetos, eu sei que também podemos usar tanto structs como classes.

Na verdade eu tenho algumas dúvidas:Classe seria uma evolução de uma struct?Existe alguma regra específica que determina quando usar ou não um struct?O fato de uma struct ser guardada no heap e não no stack tem algum diferença de performance?

Algum exemplo de diferença de uso?

Eu sei que essa é uma pergunta complicada kkk, obrigado para quem responder.

Desculpa qualquer erro de escrita.

Atualizada:

A formatação do Yahoo resposta está horrível, desculpa por sair todas as perguntas coladas nas outras. Espero que entendam.

4 Respostas

Classificação
  • Mateus
    Lv 6
    Há 1 mês

    Você meio que já respondeu a pergunta, em C# toda struct herda de System.ValueType (isto é, são tipo por valor) enquanto uma classe herda de System.Object (tipo por referência).

    Algumas outras diferenças entre classe e struct em C#:

    - Uma struct suporta métodos, mas não suporta campos de instância.

    - Uma struct não suporta construtor explícito sem parâmetros, isto garante que todos os campos sejam inicializados com o seu valor padrão.

    - Uma struct só aceita construtores completos (com um parâmetro para cada campo), caso um campo fique de fora, deve-se utilizar a palavra reservada "this":

    // Foo.cs

    public int Bar { get; set; }

    public double Foobar { get; set; }

    public Foo(int bar) : this()

    {

        Bar = bar;

    }

    - Pelo fato de estar alocada na stack e não na heap, isto garante que haja uma instância por thread (cópia de valor), bem útil em sistemas concorrentes.

    - Diferente de classes, structs não suportam heranças.

    "Classe seria uma evolução de uma struct?"

    Não, ambas possuem objetivos diferentes. Uma classe deve representar uma entidade (Pessoa, Player, Actor, Casa), enquanto uma struct deve representar um dado concreto (int, double, float, Date...) e não devem ultrapassar 16 bytes.

    A contexto de curiosidade, System.DateTime é uma struct.

  • Há 1 mês

    A diferença é a acessibilidade dos membros e das heranças.

    struct por padrão é public

    class por padrão é private.

  • ?
    Lv 7
    Há 1 mês

    Simplificadamente uma struct em C é apenas uma definição de dados enquanto que uma classe envolve a definição dos dados juntamente com os métodos que manipulam tais dados.

  • Há 1 mês

    Apenas alguns tipos primitivos como, por exemplo, inteiros, booleans e as nossas famosas “structs” são armazenados diretamente na memória stack, sendo o valor própriamente dito e não a referência a ele.

Tem mais perguntas? Obtenha suas respostas perguntando agora.