Проблема нулевой ссылки в унаследованном объекте - PullRequest
0 голосов
/ 30 мая 2011

Я пытаюсь закодировать простой класс членства.Первым именем класса является Customer, и у него есть другие классы, такие как Silver_Customer, Gold_Customer, которые унаследованы от класса Customer.

Я использую эти классы в своем простом приложении Windows:

    public Customer customer;
    public Form_MURAT_TURAN()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        Product p1 = new Product("Blouse", 152.80);
        Product p2 = new Product("T-Shirt", 50.25);
        .....
        lbProducts.Items.Add(p1);
        lbProducts.Items.Add(p2);
        .....
    }

    private void btnCustomer_Click(object sender, EventArgs e)
    {
        Customer customer = new Standard_Customer(txtName.Text, txtSurname.Text, 0);
        customer.Name = "Mark 1";
        customer.TotalAmount = 5;
        gbCustomer.Enabled = false;
        gbProduct.Enabled = true;

        set_info(customer.customerType(), customer.Name + " " + customer.Surname, customer.TotalAmount);
    }

    private void btnAddToBasket_Click(object sender, EventArgs e)
    {
        customer.Name = "Mark 2";
    }

Все отлично работает, кромеМетод btnAddToBasket_Click.customer.Name = "Отметка 2";строка дает мне NullReferenceException ошибку, но customer.Name = строка "Mark 1" работает.

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Почему бы вам не попробовать:

private void btnCustomer_Click(object sender, EventArgs e)
{
        this.customer = new Standard_Customer(txtName.Text, txtSurname.Text, 0);
        customer.Name = "Mark 1";
        customer.TotalAmount = 5;
        gbCustomer.Enabled = false;
        gbProduct.Enabled = true;

        set_info(customer.customerType(), customer.Name + " " + customer.Surname, customer.TotalAmount);
    }

Попробуйте использовать this.customer при создании нового клиента.

1 голос
/ 30 мая 2011

В btnCustomer_Click вы не устанавливаете свой глобальный customer объект.Вы устанавливаете локальную версию этого.Измените свой код следующим образом:

private void btnCustomer_Click(object sender, EventArgs e)
{
    customer = new Standard_Customer(txtName.Text, txtSurname.Text, 0);
...