2
respostas

Duvidas sobre OO

Boa tarde galera,

Tenho algumas duvidas no c# que são

1 - Em c#, as classes não vem como publicas, diferente do Java.

Se com:

class NomeClasse{
}

eu consigo instanciar a mesma, qual é a vantagem de usar Public ?

2- tem alguma vantagem em transformar um atributo em properties se eu não vou usar a regra de negocio ?

ex: public int Idade { get; set; } ao invés de: public int idade ?

Alguém poderia me ajudar ?

Obrigado,

João Vitor.

2 respostas

Boa tarde João,

Olha eu não manjo de C#, mas imaginando que a parte de OO seja semelhante ao Java, vou tentar te ajudar:

  1. No Java também não precisa declarar com o modificador public se não quiser. A diferença lá é que por padrão assume um modificador chamado default, e embora seja muito parecido com o public, isso restringiria a visibilidade da classe apenas para o pacote que ela se encontra.

  2. Não sei o que seria essa properties, mas em geral campos das classes de modelo (também chamada entidades, entre outros) tem atributos membros que são considerados conjuntos de informações inerentes ao negócio. A pergunta seria, se não vai utilizar este campo, ele precisa existir para que? Como seria este uso desse properties?

Abraço.

Opa, João. Beleza?

Não sou expert em C# mas vou tentar te dar uma luz

1 - Suas classes em C# são, por padrão, internal. Isso quer dizer que elas vão estar disponíveis para todas as outras classes do mesmo Assembly. Basicamente, todas as classes do mesmo projeto, caso esteja todo em um único Assembly. Normalmente este comportamento padrão é o suficiente, embora eu tenha aprendido nos cursos a utilizar o public "pra garantir".

2- A vantagem de utilizar uma property ao invés de um atributo público, é que se você, futuramente precisar adicionar alguma regra de negócio, seu código não vai quebrar. Você só vai precisar alterar em um lugar, entende? Ex.:

Antes:

public string Nome { get; set; }

Depois, tendo sido criada uma regra de negócio:

private string _nome;

public string Nome {
    get { return _nome.ToUpper(); } 
    set { _nome = value; }
}

O código que utilizar a classe em questão, não vai precisar mudar nada em seu código, e o nome já virá em letras maiúsculas, conforme a nova regra dita.