Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Property Get Runs When Class Instantiated
Message
 
To
09/04/2009 17:47:40
Timothy Bryan
Sharpline Consultants
Conroe, Texas, United States
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Miscellaneous
Thread ID:
01394040
Message ID:
01394069
Views:
37
See my response to Mike



>>The breakpoint stops the code when the field is initialized during instantiation, but the count is 0. When I step out of all the private field initializations, the count is 3. At no time does _LoadClients(); get called.
>
>That is the only two references to the field in your class. How does this method get used? I see you found the spot, but curious how this method was running when there was no call to it.
>Tim
>>
>>
>>>Set your breakpoint on _colClients. Since it is read only you are also setting the underlying variable from other places. If _LoadClients is being called from anywhere it is also setting the value. by the way, it appears you class is private so the read only property isn't really available outside the class. I wish VS would make classes public by default from the template. One day I will fix this again in my install.
>>>Tim
>>>
>>>>Here is the class:
>>>>
>>>>
>>>>class csCompany : csDataRecordBase
>>>>{
>>>>    private ArrayList _colClients = new ArrayList();
>>>>    public ArrayList colClients
>>>>    {
>>>>        get
>>>>        {
>>>>            if (_colClients.Count == 0)
>>>>            {
>>>>                _LoadClients();
>>>>            }
>>>>            return _colClients;
>>>>        }
>>>>    }
>>>>    
>>>>    private string _sCompanyName = "";
>>>>    public string sCompanyName
>>>>    {
>>>>        get { return _sCompanyName; }
>>>>        set { _sCompanyName = value; }
>>>>    }
>>>>
>>>>    public override bool LoadData()
>>>>    {
>>>>        bool bRetVal = true;
>>>>        SqlDataReader rdrReader = csAppDataAccess.GetCompany(this.iRecordId);
>>>>
>>>>        if (csAppDataAccess.oException == null)
>>>>        {
>>>>            rdrReader.Read();
>>>>            _sCompanyName = rdrReader["CompanyName"].ToString();
>>>>        }
>>>>        else
>>>>        {
>>>>            this.oException = csAppDataAccess.oException;
>>>>            bRetVal = false;
>>>>        }
>>>>
>>>>        return bRetVal;
>>>>    }
>>>>
>>>>
>>>>    private void _LoadClients()
>>>>    {
>>>>        _colClients.Clear();
>>>>
>>>>        csClients oClients = new csClients();
>>>>        oClients.LoadData(this.iRecordId);
>>>>        _colClients = oClients.colData;
>>>>    }
>>>>
>>>>
>>>>}
>>>>
>>>>
>>>>And here's the instantiation:
>>>>
>>>>
>>>>csCompany oCompany = new csCompany();
>>>>
>>>>
>>>>When I hover over oCompany and expand the tooltip, colClients shows "Count = 3"
>>>>
>>>>I have no idea why.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>>I have a property on a Company class:
>>>>>>
>>>>>>
>>>>>>private ArrayList _colClients = new ArrayList();
>>>>>>public ArrayList colClients
>>>>>>{
>>>>>>    get
>>>>>>    {
>>>>>>        if (_colClients.Count == 0)
>>>>>>        {
>>>>>>            _LoadClients();
>>>>>>        }
>>>>>>        return _colClients;
>>>>>>    }
>>>>>>}
>>>>>>
>>>>>>
>>>>>>When I instantiate the class, the colClients collection is being loaded. I put a breakpoint on the IF() inside the Get, but it doesn't break. Yet when I look at colClients.Count, it's set to 3 instances of a Client class.
>>>>>>
>>>>>>Anyone know why the Get assesor is firing when the class is instantiated?
>>>>>
>>>>>Search your class for any references to "colClients".
Everything makes sense in someone's mind
public class SystemCrasher :ICrashable
In addition, an integer field is not for irrational people
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform