C # установка свойства bool из переключателя - PullRequest
0 голосов
/ 14 декабря 2011

У меня проблема с переключателями. Что я делаю, так это создаю объект customer и в то же время хочу установить одно свойство bool для каждого переключателя в базовом классе customer. Я получаю сообщение об ошибке «StackOverflowException Was Unhandeled». Ошибка указывает на это "IsClient = значение;" в классе CustomerType.

Здесь я создаю объект Customer (внутри CustomerForm.cs)

m_customer = new Customer(radioClient.Checked, radioProspect.Checked, radioCompany.Checked, radioPrivate.Checked);


public class Customer : CustomerType
{
private Contact m_contact;
private string m_id;

public Customer()
{
    m_id = string.Empty;
}

public Customer(bool client, bool prospect, bool company, bool priv)
{
    base.IsClient = client;
    base.IsProspect = prospect;
    base.IsCompany = company;
    base.IsPrivate = priv;
    m_id = string.Empty;
}

public Customer(Contact contactData)
{ m_contact = contactData; }

public Customer(string id, Contact contact)
{
    m_id = id;
    m_contact = contact;
}

public Contact ContactData
{
    get { return m_contact; }
    set {
        if (value != null)
            m_contact = value;  
    }
}

public string Id
{
    get { return m_id; }
    set { m_id = value; }
}

public override string ToString()
{
    return m_contact.ToString();
}
}


public class CustomerType 
{

public bool IsClient
{
    get { return IsClient; }
    set { IsClient = value; }
}

public bool IsCompany
{
    get { return IsCompany; }
    set { IsCompany = value; }
}

public bool IsPrivate
{
    get { return IsPrivate; }
    set { IsPrivate = value; }
}

public bool IsProspect
{
    get { return IsProspect; }
    set { IsProspect = value; }
}

}

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Все свойства в вашем CustomerType являются рекурсивными - они взрывают стек.

Взгляните на это:

public bool IsClient
{
    get { return IsClient; }
    set { IsClient = value; }
}

Когда вы пытаетесь получить значение IsClient свойство, затем вы пытаетесь получить значение IsClient свойства.Который затем пытается получить значение свойства IsClient ...

Либо реализуйте их как автоматически реализованные свойства:

public bool IsClient
{
    get; set;
}

, либо укажите правильное поле поддержки:

private bool isClient;
public bool IsClient
{
    get { return isClient; }
    set { isClient = value; }
}
1 голос
/ 14 декабря 2011

Свойство является функцией.То, что вы написали, эквивалентно написанию:

public void DoSomething()
{
    DoSomething();  // infinite recursion
}

Код ошибки:

public bool IsClient
{
    get { return IsClient; }
    set { IsClient = value; }
}

Правильный код:

public bool IsClient
{
    get { return _isClient; }
    set { _isClient = value; }
}
private bool _isClient;

Или в C # 3.0 или новееможет использовать автоматически реализованные свойства для простых:

public bool IsClient { get; set; }
...