COMO UTILIZAR PROPRIEDADES EM OUTRA CLASSE?
Estou tentando utilizar propriedades de uma classe em outra classe mas não estou conseguindo, fiz varias pesquisas mas não consegui implementar.
Fiz um exemplo para ficar mais fácil o entendimento.
Criei uma classe produto e uma classe TipoProduto, na classe Produto criei uma propriedade do tipo TipoProduto. Preciso dentro de um formulário carregar a propriedade DescricaoTipo que é da classe TipoProduto, através da classe Produto, mas dá o seguinte erro: An unhandled exception of type [ô]System.NullReferenceException[ô] occurred in Teste.exe
Veja os códigos que utilizei:
Classe produto:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teste
{
class Produto
{
public Produto()
{
TipoProduto TipoProduto = new TipoProduto();
}
private int _Id;
public int Id
{
get { return _Id; }
set { _Id = value; }
}
private string _descricao;
public string descricao
{
get { return _descricao; }
set { _descricao = value; }
}
private TipoProduto _descricaoTipo;
public TipoProduto descricaoTipo
{
get { return _descricaoTipo; }
set { _descricaoTipo = value; }
}
}
Classe TipoProduto:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teste
{
public class TipoProduto
{
private int _IdTipo;
public int IdTipo
{
get { return _IdTipo; }
set { _IdTipo = value; }
}
private string _descricaoTipo;
public string descricaotipo
{
get { return _descricaoTipo; }
set { _descricaoTipo = value; }
}
}
}
Código do formulario:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Teste
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Produto pro = new Produto();
pro.Id = 1;
pro.descricao = [Ô]teste[Ô];
pro.descricaoTipo.descricaotipo = [Ô]teste[Ô]; // Aqui acontece o erro
}
}
}
é possÃvel fazer isso?
Isso é uma boa pratica de programação a orientação a objetos? Ou devo criar uma unica classe do tipo produto contendo todas as informações necessárias? e fazer esse separação de produto e tipo de produto somente no banco de dados?
Desde já agradeço quem puder me orientar.
Citação::
Olá.
Estou tentando utilizar propriedades de uma classe em outra classe mas não estou conseguindo, fiz varias pesquisas mas não consegui implementar.
Fiz um exemplo para ficar mais fácil o entendimento.
Criei uma classe produto e uma classe TipoProduto, na classe Produto criei uma propriedade do tipo TipoProduto. Preciso dentro de um formulário carregar a propriedade DescricaoTipo que é da classe TipoProduto, através da classe Produto, mas dá o seguinte erro: An unhandled exception of type [ô]System.NullReferenceException[ô] occurred in Teste.exe
Veja os códigos que utilizei:
Classe produto:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teste
{
class Produto
{
public Produto()
{
TipoProduto TipoProduto = new TipoProduto();
}
private int _Id;
public int Id
{
get { return _Id; }
set { _Id = value; }
}
private string _descricao;
public string descricao
{
get { return _descricao; }
set { _descricao = value; }
}
private TipoProduto _descricaoTipo;
public TipoProduto descricaoTipo
{
get { return _descricaoTipo; }
set { _descricaoTipo = value; }
}
}
Classe TipoProduto:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teste
{
public class TipoProduto
{
private int _IdTipo;
public int IdTipo
{
get { return _IdTipo; }
set { _IdTipo = value; }
}
private string _descricaoTipo;
public string descricaotipo
{
get { return _descricaoTipo; }
set { _descricaoTipo = value; }
}
}
}
Código do formulario:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Teste
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Produto pro = new Produto();
pro.Id = 1;
pro.descricao = [Ô]teste[Ô];
pro.descricaoTipo.descricaotipo = [Ô]teste[Ô]; // Aqui acontece o erro
}
}
}
é possÃvel fazer isso?
Isso é uma boa pratica de programação a orientação a objetos? Ou devo criar uma unica classe do tipo produto contendo todas as informações necessárias? e fazer esse separação de produto e tipo de produto somente no banco de dados?
Desde já agradeço quem puder me orientar.
Olá MRSILVA, você deve inicializar o objeto TipoProduto, segue abaixo;
Produto pro = new Produto();
pro.Id = 1;
pro.descricao = [Ô]teste[Ô];
pro.descricaoTipo = new TipoProduto {
descricaotipo = [Ô]teste[Ô]
}
Suas classes caso não vá utilizar bindings, podem ser simplificadas, por exemplo:
public string descricaotipo { get; set; }
Existem várias maneiras de implementar isso, essa que você postou é uma delas, só falatou inicializar o objeto.
Abraços
Deu certo!
Abraços.
Citação::
Olá.
Estou tentando utilizar propriedades de uma classe em outra classe mas não estou conseguindo, fiz varias pesquisas mas não consegui implementar.
Fiz um exemplo para ficar mais fácil o entendimento.
Criei uma classe produto e uma classe TipoProduto, na classe Produto criei uma propriedade do tipo TipoProduto. Preciso dentro de um formulário carregar a propriedade DescricaoTipo que é da classe TipoProduto, através da classe Produto, mas dá o seguinte erro: An unhandled exception of type [ô]System.NullReferenceException[ô] occurred in Teste.exe
Veja os códigos que utilizei:
Classe produto:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teste
{
class Produto
{
public Produto()
{
TipoProduto TipoProduto = new TipoProduto();
}
private int _Id;
public int Id
{
get { return _Id; }
set { _Id = value; }
}
private string _descricao;
public string descricao
{
get { return _descricao; }
set { _descricao = value; }
}
private TipoProduto _descricaoTipo;
public TipoProduto descricaoTipo
{
get { return _descricaoTipo; }
set { _descricaoTipo = value; }
}
}
Classe TipoProduto:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teste
{
public class TipoProduto
{
private int _IdTipo;
public int IdTipo
{
get { return _IdTipo; }
set { _IdTipo = value; }
}
private string _descricaoTipo;
public string descricaotipo
{
get { return _descricaoTipo; }
set { _descricaoTipo = value; }
}
}
}
Código do formulario:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Teste
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Produto pro = new Produto();
pro.Id = 1;
pro.descricao = [Ô]teste[Ô];
pro.descricaoTipo.descricaotipo = [Ô]teste[Ô]; // Aqui acontece o erro
}
}
}
é possÃvel fazer isso?
Isso é uma boa pratica de programação a orientação a objetos? Ou devo criar uma unica classe do tipo produto contendo todas as informações necessárias? e fazer esse separação de produto e tipo de produto somente no banco de dados?
Desde já agradeço quem puder me orientar.
Como o LAMPIÃO já resolveu sua questão, queria só fazer um adendo a situação.
No seu construtor, você inicializou a Classe TipoProduto, mas instanciou como uma nova classe.
public Produto()
{
TipoProduto TipoProduto = new TipoProduto();
}
O correto seria fazer assim.
Public TipoProduto _tipoProduto {get;set;}
public Produto()
{
_tipoProduto = new TipoProduto();
}
Desta forma, você não precisa instanciar uma nova classe ao chamar a propriedade definida, como foi feito abaixo.
Produto pro = new Produto();
pro.Id = 1;
pro.descricao = [Ô]teste[Ô];
pro.descricaoTipo = new TipoProduto {
descricaotipo = [Ô]teste[Ô]
}
Se tivesse encerrado o tópico não tinha aprendido isso hoje.
Testei aqui deu certo.