none
Class ou Struct, qual devo usar? RRS feed

  • Pergunta

  • Olá a todos, estou precisando de uma ajudinha na questão de performance da minha aplicação. Nela, eu dou a oportunidade do usuário criar pastas, então, nesse caso, embora eu pudesse somente pegar strings e armazena-las em um List<>, eu prefiro criar um tipo de dados para representar uma pasta. Mas porque?, bom, porque eu também quero dar a oportunidade pro usuário criar subpastas; e óbvio, você pode dizer que eu poderia fazer isso de outra maneira, sem precisar criar um tipo de dados e tal... Mas enfim, eu prefiro esse caminho por enquanto. A minha dúvida mesmo é à respeito de classes ou structs, eu nao sei qual deles devo usar para criar a representação do meu tipo de dados. Para facilitar o entendimento da situação, vou mostrar pra vocês quais informações eu vou precisar nesse tipo de dados:

    public (class/struct) Folder
    {
        private string _name;
        private string _path;
        private List<Folder> _subfolders;
    
        public string Name { get; set; }
        public string Path { get; set; }
        public List<Folder> Subfolders { get; }
    }

    Ok, como viram agora, a minha preocupação com class ou struct é por que cada Folder, vai ter um List<> de Folder (novamente, você pode dizer que eu poderia fazer essa representação de outra maneira, mas prefiro continuar com essa mesmo por enquanto).

    Bom, essa foi uma "boa" maneira que eu encontrei para representar uma pasta, já que na minha aplicação eu quero dar a oportunidade para o usuário criar subpastas, nesse caso, cada Folder teria suas subpastas, e assim por diante.

    Ok, agora que vocês conhecem o cenário, alguém poderia me dizer qual tipo de valor seria mais adequado nessa situação, Class ou Struc?

    quinta-feira, 27 de abril de 2017 14:56

Respostas

Todas as Respostas

  • Segue um link com dicas de quando utilizar struct X classes: https://msdn.microsoft.com/pt-br/library/ms229017(v=vs.110).aspx

    BTW para o seu caso eu optaria por utilizar classes.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quinta-feira, 27 de abril de 2017 16:08
  • Eu nao sei se fazer isso é uma boa idéia... Nao pela performance em si, mas pelo design. O que voce teria que fazer é uma estrutura do tipo arvore. Na verdade a coleçao DirectoryInfo nativa do c# ja tem tudo isso o que voce precisa, mas caso queira recriar a roda:

    https://www.codeproject.com/Articles/12592/Generic-Tree-T-in-C

    Veja a classe DirectoryInfo

    Agora o que é melhor, struct ou class? Como eu disse, creio que no seu caso seria outra estrutura, mas sctruct nao é OO, ou seja, ele nao suporta herança, polimorfismo, etc.. mas ele tende a ser mais rapido porque ele é passado sempre como valor e nao como um ponteiro, como é o caso dos objetos instanciados de uma classe.

    Veja mais aqui:

    
    

    http://geekswithblogs.net/BlackRabbitCoder/archive/2010/07/29/c-fundamentals-the-differences-between-struct-and-class.aspx

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".



    quinta-feira, 27 de abril de 2017 16:16
    Moderador
  • Na verdade William, eu não preciso pegar informação de diretórios do sistema, por isso não estou usando as classes do System.IO, se não óbviamente usaria. É por que, eu quero simplesmente ter uma representação de pasta, só para pegar informações do usuario, como o nome dela, mas outras informações como o Path, são nescessarias na hora de criar as pastas de verdade. Entende, meu programa é para facilitar a criação de pastas, então o usuario ve uma lista, adiciona pastas, subpastas à essas pastas e assim por diante. Por isso essa ideia de "representação" de pastas. Enfim, vou usar o struct como você disse.

    (Só um edit, não estou programando para windows forms, XAML ou Console, estou fazendo uma tool pro Unity Editor, por isso a questão de representar uma pasta, o workflow la é diferente)

    • Editado Cliffinho sexta-feira, 28 de abril de 2017 16:48
    sexta-feira, 28 de abril de 2017 16:46