No, I understand exactly what you mean, but I feel that is the way that people SHOULD do it, hence my use of the word.
I didn't find your earlier comments either funny or productive regarding my ability (or you perceiving my "lack of" ability), and I like to think I've been fairly successful so far in my career as a Developer, and if *I* think something should be done in a particular way, I'm happy to tell this to others. Whether they do this or not is entirely up to them. However, this is becoming self-perpetuating, as you think I *shouldn't* tell people what I think they *should* do. Let's just agree to disagree, and try not to throw any "jokes" around later. On Thu, Dec 17, 2009 at 12:25 PM, Processor Devil <[email protected] > wrote: > 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. >>>> >>> >>> >> >
