again and again... Yes, many open source projects uses that... and many open source project are also nothing more but just spaghetti code (try to search for SpectateSwamp Desktop Search, you will laugh for sure), but... why the hell do I need some less skilled programmer to change encryption key and IV vector properties in my class when there is function which does both and it works as it should? Sometimes you just need to change MORE than just one variable to make the code works, do you want end-programmer to do it one by one and let him make a mistake or omit something or you will give him just function that will change it internally and all for sure?
P.S. about the Open Source projects... so if they do it then it is the only way? All I wanted you to do next time was not to use word SHOULD, is it hard to understand? 2009/12/17 Jamie Fraser <[email protected]> > > > On Thu, Dec 17, 2009 at 11:38 AM, Processor Devil < > [email protected]> wrote: > >> well, in read-only variables you don't need to specify the Set part at >> all... >> another thing I was about also was that specifying logic inside the >> property is not a really good practice (it is always better to create some >> private method and call it from inside, it saves time and it is better for >> reusability as well). >> > > How do you set the property then? By accessing the field directly? I don't > like that. If you get using a property, you should set using a property. > > And there is NOTHING wrong with having some logic within the property - > take a look through the source code of any major Open Source project and see > how they do it. > > > >> And the exact thing I wanted to hear was this: "In general, I find it good >> practice to use Get Properties (where they exist) as a default". Yes, you >> find it a good practice, but it is not general good practice, you should NOT >> say anyone that he SHOULD use it. It is also the reason why this thread >> started... Bunch of programmers who uses this practice told him that he >> SHOULD do it their way and he got confused... It is your good practice, it >> is not my good practice, but I am not going to force you to do it my way ;-) >> >> Sorry if I do look like being upset, the reason is that I am upset, I have >> to attend LiveMeeting which is 2 hours in length and sound doesn't work as >> it should... >> >> 2009/12/17 Jamie Fraser <[email protected]> >> >>> >>> >>> Yes, of course if property has some logic which checks the set value or >>>> count the get value from something then yes, you should use the property, >>>> but why to use it when it contains only eg get {return this.value} ? and >>>> one >>>> more thing about your message: >>>> >>> >>> In general, I find it good practice to use Get Properties (where they >>> exist) as a default. They might only say >>> >>> return _abc; >>> >>> but then they might say >>> >>> if(x || y) { _abc = _service.Refresh(); } else { _abc = >>> service.Load(_id); } >>> return _abc; >>> >>> And they also might *change* from example 1 to example 2. If you >>> consistently use the Get Property, if the logic changes, your code will >>> still work. Remember - another developer might change the logic contained in >>> the property but NOT check the the rest of the code for where it is used. >>> >>> So, elsewhere in the class, if you say >>> >>> int a = _abc; >>> >>> Then your code breaks. >>> >>> But if you say >>> >>> int a = PropertyABC; >>> >>> Then your code continues working. It is a safety net - win/win, if you >>> will. If the property only returns _abc, then the compiler will inline this >>> to int a = _abc anyway, so there is no performance hit. >>> >>> >>> >>>> -If the property is read-only, then there is a reason for this (i.e. >>>> logic already exists internally to set the value of the underlying field) >>>> and that logic is? Sorry, but I don't quite understand that, coding >>>> classes always means to create some its own logic and how does look a logic >>>> to set the variable? Maybe this.variable = value? Oh no, sry, you can't, >>>> you >>>> must use property for this... but property is read-only? Damn, so there >>>> already MUST be some logic that sets it... >>>> --that was test of some irony, don't get it personally ;-) >>>> >>>> >>> I don't really get what you mean here. >>> >>> In the case of a read-only variable, you want to prevent *external* >>> classes from changing the value of the field. Therefore, you do something >>> like >>> >>> public string Name >>> { >>> get >>> { >>> return _name; >>> } >>> private set >>> { >>> _name = value; >>> } >>> } >>> >>> And you use the property as normal. >>> >> >> >
