Fórum Diferença entre Get e Set #2112

22/01/2009

0

Bom dia... Qual a diferença entre GET e SET... e o que são field´s, property´s e atibutos...   private string _nome; public string Nome { get { return _nome; } set { _nome = value; } }   Aguardando contato e obrigado...
Vinicius Climaco

Vinicius Climaco

Responder

Posts

22/01/2009

Luiz Maia

Ola Vinicius, O get e o set são recursos usados para definir propriedades para um objeto no conceito de orientação à objeto. O Get recebe o valor e o Set aplica este valor numa instancia do objeto. Fields, propriedades e atributos são a mesma coisa.  Numa classe vpcê os métodos e as propriedades ou atributos da mesma.   Para ficar mais claro, vou exemplificar com código:   //Atributo privado private string _nome; //Propriedade publica public string Nome { get { return _nome; } set { _nome= value; } }   Para fazer a instancia deste objeto basta chamar: NomeDaClasse.Nome = "Luiz Maia";   E para pegar o valor, mesma coisa:   string teste = NomeDaClasse.Nome;   Agora um exemplo de classe e suas propriedades, veja abaixo um diagrama de classes:     A Classe aluno possui duas propriedades: Codigo e nome. E não possui método, mas poderia ter como por exemplo: RecuperarMaterias();   Espero ter ajudado. Abraços Att Luiz Maia      
Responder

Gostei + 0

22/01/2009

Vinicius Climaco

Porque a questão é a seguinte, tenhjo um gridview que chama um List<Funcionario>   Classe de Funcionário:   //Campos Privados private int _idFuncionario; private Setor _setor; //Propriedades public int IdFuncionario { get { return _idFuncionario; } set { _idFuncionario = value; } } public Setor Setor { get { if (_setor == null) { _setor = new Setor(); } return _setor; } set { _setor = value; } }   ai eu chamo o metodo: public new List<Funcionario> Select() na qual ele monta uma lista de Funcionário, preenche o atributo Setor com os setores de cada funcionário certinho, baseado em um id que ele possui, até aqui ok... já fiz um DEBUG e da certo, mas eu coloco no Grid View um campo qualquer e digito no dataField Setor.Nome que eu quero que exiba o Nome do Setor, ele esta em memória, mas ele diz que não tem esse campo e dá erro... mas se eu quiser exibir o setor em um label por exemplo eu consigo, com Setor.Nome, porque ele recupera certinho o registro.   Obrigado e aguardo contato...
Responder

Gostei + 0

22/01/2009

Luiz Maia

Me mande a sua query que popula o List funcionario por favor.   Aguardo Luiz maia
Responder

Gostei + 0

22/01/2009

Vinicius Climaco

Esse é o de Funcionário, embaixo vou colocar o de Setor   public new List<Funcionario> Select(string ConnStr) { try { string strSql = " SELECT P.id as PESSOA_ID," + " P.identificacao as PESSOA_IDENTIFICACAO, P.catraca as PESSOA_CATRACA," + " P.nome as PESSOA_NOME, P.modoTratamento as PESSOA_MODOTRATAMENTO," + " P.telefone_DDD as PESSOA_TELEFONEDDD, P.telefone as PESSOA_TELEFONE," + " P.celular_DDD as PESSOA_CELULARDDD, P.celular as PESSOA_CELULAR," + " P.email as PESSOA_EMAIL, P.dataNascimento as PESSOA_DATANASCIMENTO," + " P.estadocivil as PESSOA_ESTADOCIVIL, P.documentoTipo as PESSOA_DOCUMENTOTIPO," + " P.documento as PESSOA_DOCUMENTO, P.enderecoTipo as PESSOA_ENDERECOTIPO," + " P.enderecoNome as PESSOA_ENDERECONOME, P.enderecoNumero as PESSOA_ENDERECONUMERO," + " P.enderecoComplemento as PESSOA_ENDERECOCOMPLEMENTO, P.enderecoBairro as PESSOA_ENDERECOBAIRRO," + " P.enderecoCidade as PESSOA_ENDERECOCIDADE, P.enderecoUF as PESSOA_ENDERECOUF," + " P.enderecoPais as PESSOA_ENDERECOPAIS, P.enderecoCep AS PESSOA_ENDERECOCEP," + " P.tipoPessoa AS PESSOA_TIPOPESSOA," + " F.id AS Funcionario_ID , F.id_pessoa AS Funcionario_IDPESSOA," + " F.matricula AS Funcionario_MATRICULA, F.senha AS Funcionario_SENHA," + " F.ativo AS Funcionario_ATIVO, F.aceito AS Funcionario_ACEITO," + " F.aceitoTipo AS Funcionario_ACEITOTIPO, F.aceitoData AS Funcionario_ACEITODATA," + " F.setor as Funcionario_SETOR," + " F.ultimaVisita AS Funcionario_ULTIMAVISITA, F.foto AS Funcionario_FOTO" + " FROM Pessoa P inner join Funcionario F on F.id_pessoa = P.id"; List<SqlParameter> objParameter = new List<SqlParameter>(); DataSet objDSFuncionario = objConnManager.RetornarDataSet(strSql, objParameter, ConnStr); DataTable objTBFuncionario = objDSFuncionario.Tables[0]; List<Funcionario> objFuncionario = new List<Funcionario>(); foreach (DataRow row in objTBFuncionario.Rows) { Funcionario objFuncionarioReg = new Funcionario(); CarregarFuncionario(ConnStr, row, objFuncionarioReg); objFuncionario.Add(objFuncionarioReg); } return objFuncionario; } catch (Exception) { throw; } } ---- METODO CARREGA FUNCIONARIO ------   private static void CarregarFuncionario(string ConnStr, DataRow row, Funcionario objFuncionarioReg) { //Pessoa objFuncionarioReg.IdPessoa = (int)row["PESSOA_ID"]; objFuncionarioReg.Identificacao = row["PESSOA_IDENTIFICACAO"].ToString(); objFuncionarioReg.Catraca = row["PESSOA_CATRACA"].ToString(); objFuncionarioReg.Nome = row["PESSOA_NOME"].ToString(); if (row["PESSOA_MODOTRATAMENTO"].ToString() != string.Empty) { objFuncionarioReg.ModoTratamento = (new DBModoTratamento()).SelectByID((int)row["PESSOA_MODOTRATAMENTO"], ConnStr); } else { objFuncionarioReg.ModoTratamento = new ModoTratamento(); } objFuncionarioReg.TelefoneDDD = row["PESSOA_TELEFONEDDD"].ToString(); objFuncionarioReg.Telefone = row["PESSOA_TELEFONE"].ToString(); objFuncionarioReg.CelularDDD = row["PESSOA_CELULARDDD"].ToString(); objFuncionarioReg.Celular = row["PESSOA_CELULAR"].ToString(); objFuncionarioReg.Email = row["PESSOA_EMAIL"].ToString(); if (row["PESSOA_DATANASCIMENTO"].ToString() != string.Empty) { objFuncionarioReg.DataNascimento = Convert.ToDateTime(row["PESSOA_DATANASCIMENTO"].ToString()); } if (row["PESSOA_ESTADOCIVIL"].ToString() != string.Empty) {objFuncionarioReg.EstadoCivil = (new DBEstadoCivil()).SelectByID((int)row["PESSOA_ESTADOCIVIL"], ConnStr);} else {objFuncionarioReg.EstadoCivil = new EstadoCivil();} if (row["PESSOA_DOCUMENTOTIPO"].ToString() != string.Empty) { objFuncionarioReg.TipoDocumento = (new DBTipoDocumento()).SelectByID((int)row["PESSOA_DOCUMENTOTIPO"], ConnStr); } else { objFuncionarioReg.TipoDocumento = new TipoDocumento(); } objFuncionarioReg.Documento = row["PESSOA_DOCUMENTO"].ToString(); if (row["PESSOA_ENDERECOTIPO"].ToString() != string.Empty) { objFuncionarioReg.TipoLogradouro = (new DBTipoLogradouro()).SelectByID((int)row["PESSOA_ENDERECOTIPO"], ConnStr); } else { objFuncionarioReg.TipoLogradouro = new TipoLogradouro(); } objFuncionarioReg.EnderecoNome = row["PESSOA_ENDERECONOME"].ToString(); objFuncionarioReg.EnderecoNumero = row["PESSOA_ENDERECONUMERO"].ToString(); objFuncionarioReg.EnderecoComplemento = row["PESSOA_ENDERECOCOMPLEMENTO"].ToString(); objFuncionarioReg.EnderecoBairro = row["PESSOA_ENDERECOBAIRRO"].ToString(); objFuncionarioReg.EnderecoCidade = row["PESSOA_ENDERECOCIDADE"].ToString(); if (row["PESSOA_ENDERECOUF"].ToString() != string.Empty) { objFuncionarioReg.UF = (new DBUF()).SelectByID((int)row["PESSOA_ENDERECOUF"], ConnStr); } else { objFuncionarioReg.UF = new UF(); } objFuncionarioReg.EnderecoPais = row["PESSOA_ENDERECOPAIS"].ToString(); objFuncionarioReg.EnderecoCep = row["PESSOA_ENDERECOCEP"].ToString(); objFuncionarioReg.TipoPessoa = row["PESSOA_TIPOPESSOA"].ToString(); //Funcionario objFuncionarioReg.IdFuncionario = (int)row["Funcionario_ID"]; objFuncionarioReg.Id_Pessoa = (int)row["Funcionario_IDPESSOA"]; objFuncionarioReg.Matricula = row["Funcionario_MATRICULA"].ToString(); objFuncionarioReg.Senha = row["Funcionario_SENHA"].ToString(); objFuncionarioReg.Ativo = row["Funcionario_ATIVO"].ToString(); objFuncionarioReg.Aceito = row["Funcionario_ACEITO"].ToString(); objFuncionarioReg.AceitoTipo = row["Funcionario_ACEITOTIPO"].ToString(); if (row["Funcionario_ACEITODATA"].ToString() != string.Empty) { objFuncionarioReg.AceitoData = (DateTime)row["Funcionario_ACEITODATA"]; } if (row["Funcionario_SETOR"].ToString() != string.Empty) {objFuncionarioReg.Setor = (new DBSetor()).SelectByID((int)row["Funcionario_SETOR"], ConnStr);} else {objFuncionarioReg.Setor = new Setor();} if (row["Funcionario_ULTIMAVISITA"].ToString() != string.Empty) { objFuncionarioReg.UltimaVisita = (DateTime)row["Funcionario_ULTIMAVISITA"]; } objFuncionarioReg.Foto = row["Funcionario_FOTO"].ToString(); }       ----- SETOR ----- public new Setor SelectByID(int p_objSetorID, string ConnStr) { try { string strSql = "SELECT * FROM Setor where ID = @id"; // Parametro do SelectByID List<SqlParameter> objParameter = new List<SqlParameter>(); objParameter.Add(new SqlParameter("@id", p_objSetorID)); DataTable objTBSetor = objConnManager.RetornarTabela(strSql, objParameter, "Setor", ConnStr); Setor objSetor = new Setor(); foreach (DataRow row in objTBSetor.Rows) { objSetor.Id = (int)row["id"]; objSetor.Nome = row["nome"].ToString(); } return objSetor; } catch (Exception) { throw; } } Ta ai qualquer dúvida estou à disposição... Aguardo contato...
Responder

Gostei + 0

22/01/2009

Luiz Maia

Vinicius,   Na propriedade da gridview vc não consegue ver suas propriedades da classe, já que estas não fazem parte do datasource que vc usou para popular a gridview. Portanto não dá para setar a propriedade do DataField desta forma. A propriedade setada no DataField deve ser uma propriedade do objeto datasource, as claras, seria o nome do campo retornado no datasource, veja o exemplo abaixo:   SELECT       F.NOME_FUNCIONARIO,       S.NOME_SETOR FROM       FUNCIONARIO F INNER JOIN SETOR S ON S.COD_SETOR = F.COD_SETOR.   Assim você consegue usar NOME_SETOR no gridview.   Aguardo seu retorno.   Luiz Maia  
Responder

Gostei + 0

22/01/2009

Vinicius Climaco

Mas nesse caso, vou mudar a camada de persistência tbm ?
Responder

Gostei + 0

22/01/2009

Vinicius Climaco

Mas seguinte, no atributo Setor eu ja tenho todo esse objeto preencido no caso é Setor.Id e Setor.Nome   Att, Vinícius Climaco.
Responder

Gostei + 0

22/01/2009

Luiz Maia

Sim, sera necessario por causa da join que tera que fazer com a tabela setor, para que a mesmo traga tabém a descrição do setor, pois no metodo funcionario vc tem apenas o ID do setor e quando vc seta o datasource do grid para este metodo e tenta colocar o nome do setor no DataField, ele não vai encontrar. Abraços
Luiz Maia
Responder

Gostei + 0

22/01/2009

Vinicius Climaco

Fala Luiz...   Fi de uma forma que creio ser mais rápido para muitos casos onde temos diversas tabelas, senão teriamos que ficar trazendo campos a todo momento, sendo que já tenho o objeto preenchido, fiz o seguinte no GridView no evento RowDataBound, fiz o método abaixo:   protected void grid_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.FindControl("lblTeste") != null) { ((System.Web.UI.WebControls.Label)e.Row.FindControl("lblTeste")).Text = objListaFuncionario[e.Row.RowIndex].Setor.Nome.ToString(); } } Creio ser mais eficiente, pois no caso se eu tivesse N campos na tabela setor eu não preciso ficar dando inner join, ou até mesmo, se for o caso de eu chamar mais tabelas, senão poderia ter o caso de eu ter até 10 inner join em uma query ou SP.   Veja o que achou do meu raciocínio... Abração Vinícius Climaco.
Responder

Gostei + 0

22/01/2009

Luiz Maia

Vinicius,   Vi outro erro no codigo:   Não é necessário o loop aqui: foreach (DataRow row in objTBSetor.Rows) { objSetor.Id = (int)row["id"]; objSetor.Nome = row["nome"].ToString(); } Já que sempre será somente um registro, passado por parâmetro. E desta forma vc faz um loop que sempre substitui os valores na propriedade do objeto. Voce deve usar uma List<Setor>:   Setor set = new Setor; List<Setor> s = new List<Setor> set.ID = ID set.Nome = Nome s.add(set);   Seria mais ou menos isto acima que deve fazer.     E outra coisa, ao usar o e.Row.RowIndex, como abaixo:   { ((System.Web.UI.WebControls.Label)e.Row.FindControl("lblTeste")).Text = objListaFuncionario[e.Row.RowIndex].Setor.Nome.ToString(); }   Vc está pegando o indice do loop e não o código do funcionario que deve ser passado para que o metodo te retorne a descrição do Setor no qual o funcionario esta incluido.   Abraços Luiz Maia      
Responder

Gostei + 0

22/01/2009

Vinicius Climaco

Eu fui pelo indíce da lista porque a lista já se encontra completa, então não preciso dar um select em setor ou algo assim, quanto ao foreach esta indo na tabela setor pelo id... E esta retornando certinho o que eu coloquei para você...   Att, Vinícius Climaco.
Responder

Gostei + 0

22/01/2009

Luiz Maia

Vinicius,   Vc mudou a propriedade do RowIndex para pegar o codigo do Funcionario no seu GridView? So assim funcionaria, e quanto ao foreach não tem necessidade,  pois vc joga os valores na propriedade e não em um list, sendo assim do vão ficar os ultimos la.   Att Luiz Maia
Responder

Gostei + 0

23/01/2009

Luiz Maia

E ai Vinicius, tudo certo? A aplicação está rodando blz? Abraços Luiz Maia
Responder

Gostei + 0

26/01/2009

Luiz Maia

Opa Vinícius, tudo bom?   Como não obtivemos respostas quanto ao seu chamado, estamos concluindo o mesmo. Qualquer dúvida não exite em nos contactar, estamos a sua disposição.   Abraços e sucesso na sua aplicação.   Att Luiz Maia
Responder

Gostei + 0

26/01/2009

Luiz Maia

Opa Vinícius, tudo bom?   Como não obtivemos respostas quanto ao seu chamado, estamos concluindo o mesmo. Qualquer dúvida não exite em nos contactar, estamos a sua disposição.   Abraços e sucesso na sua aplicação.   Att Luiz Maia
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar