|
And if you refactor a field starting with "_" in VS it automatically removes the underscore:
private int _MyProperty;
public int MyProperty
{
get { return _MyProperty; }
set { _MyProperty = value; }
}
If you don't start with an underscore you get Yeuch!
private int MyProperty;
public int MyProperty1
{
get { return MyProperty; }
set { MyProperty = value; }
}
So I guess that MS's right hand isn't talking to it's left hand again...
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
They are two different issues.
"This" can reference any field, property or method.
"_" is simply a prefix used to indicate (by past convention) that this is a "private field", regardless of whether it is a backing store or not.
It was a shorter version of the C/C++ convention which used "m_..." for its "members" (and which still finds its way into other languages).
"_" always implies "local to this instance" (and therefore "this" is assumed).
But that's just me
|
|
|
|
|
|
Forgot to add that "_" also tells me it's not a "local variable" or "parameter", since they would otherwise all have the same name (using conventional camel-case rules).
|
|
|
|
|
MS doesn't follow their own naming conventions...
All my class members are PascalCase, all parameters/local variables are camelCase. So I don't need the this-keyword to initialize a class member from a constructor parameter and I don't use it anywhere else either. The leading underscore I only use if I happen to need an "explicit" backing field for a property.
I like it like this because: Looking at the first letter instantly tells you if it's a class member or a local identifier. No syntactically unneccessary visual this-clutter or underscore-clutter with the mentioned exception where it actually serves a purpose.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
|
N_tro_P wrote: That is what Griff said he does as well. Not quite - Griff seems to use pascalCase for fields, requiring a this for initialization from parameters.
N_tro_P wrote: So what do we do here? Should they have an underscore? I should have been more precise: I use the underscore only for a field if there is a property which returns that one field and possibly sets that one field (which introduces the problem of wanting to name the field like the property). So in your example I wouldn't use underscores because the properties return computed values, thus have a different meaning than any field and therefore will be named differently from any field.
N_tro_P wrote: where this fails is when extensions occur. A new requirement is added to a component that is a simple one. Expose someField with a public accessor. Now you must modify all usages of the field. Yes, unless you can just change the field into a property. Lacking any sort of co-worker this hasn't been a problem for me
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
|
N_tro_P wrote: That is why we have auto-properties. No, I didn't mean auto properties. I meant properties which, albeit reading and setting only one field, do a bit more than that, e.g. checking whether the new value is actually different to fire a PropertyChangedNotification only then.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
|
Auto-properties are not the same as a "private backed" property that just sets or returns the private field value. For example, an automatic property can't be used within the class as an out or ref call to a method. (And until fairly recently couldn't have a default value).
I really don't like exposing fields at all - it forces the design to remain unchanged - and you can't just "promote" a field to a property later because of the possible external use of the fields as out or ref parameters.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
(I moved this question from the .Net forum to make sure the reason for no replies isn't that it didn't get noticed.)
I'm looking for a light-weight, free-to-use Named-Lock-Manager solution in .Net.
Named-Lock-Manager in the sense that it allows to place locks on arbitrary objects represented by their name. There should be at least these lock-types: Null, Protected Read (Shared), Protected Write (Update), Exclusive.
Light-weight in the sense of being usable in-process and consisting of just some classes or a DLL (the license might require this distinction).
This is a new field for me, so my journey started with Google. I found this Wikipedia page Distributed lock manager[^] which, in principle, seems to describe closest what I'm looking for except that I don't need the distributed/networking stuff baked into it. But the existing solutions mentioned there (Apache Zookeeper, Redis, Google Chubby) don't fit my requirements of different lock-types and/or aren't light-weight (and Google Chubby presumably is proprietary on top of that).
I then somehow found LockManager Class (Microsoft.TeamFoundation.Framework.Server)[^] which seems to offer the functional features I'm looking for but (having zero knowledge about anything Microsoft.Team*) would probably require a TFS-Installation and a license for that?
I also found this, but it's too simplistic: https://dzone.com/articles/managing-business-object-locks[^]
And that's all I found so far (maybe I'm not using optimal search terms).
Do you know of an existing solution that fits my requirements or comes reasonably close?
Thanks,
Sascha
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
Since you have never stated why you think you need a "lock manager", I do not think anyone is able to relate your "needs" (whatever they are) to an "existing solution".
|
|
|
|
|
Gerry Schmitz wrote: your "needs" (whatever they are) I did specify my needs, at least as far as I think they are relevant.
Gerry Schmitz wrote: why you think you need a "lock manager", For a pessimistic record locking scenario.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
You have "wants" ... they are not the same as needs within a particular application context.
If you expect more answers, you probably need to give a better explanation of the "problem" you are trying to solve.
|
|
|
|
|
Hmmm.. what I wrote in my original message aren't that my (assumed) needs?
I want to implement offline pessimistic locking on database records (by offline I mean without keeping a connection and transaction alive from reading to updating). And (I think) for that I need the outlined lock manager.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
The first rule of lock management is: DON'T use it (locks) (unless you have to).
The second rule of lock management is: DON'T use pessimistic locking (unless you have to); use optimistic locking.
I have yet to see where you "need" both, even though you "want" both.
A "transaction" is effectively a "lock"; which does not involve you worrying about locks.
|
|
|
|
|
Gerry Schmitz wrote: I have yet to see where you "need" both, even though you "want" both. I didn't write I'd want both.
Gerry Schmitz wrote: A "transaction" is effectively a "lock"; which does not involve you worrying about locks. I wrote that I don't want to keep a connection and transaction alive from reading to updating.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
"Use the virtually unlimited space available in a message to provide a detailed question that allows people to understand what kind of help is needed."(Lefevre 14-Mar-2016)
Transactions can be asynchronous.
I'm done here.
|
|
|
|
|
Gerry, I absolutely didn't mean to test your patience and I apologize if I have. I'm oblivious to asynchronous transactions which maybe partly explains the "phaseshift" between our messages. I'll look into that, thank you for the pointer.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
I am new to c# and using windows forms.
I have a DataGridView control on a form and I need to allow a user to multi-select rows (when they click on a row) without using the CTRL key (no keyboard is available - they are using a touch screen) and without using check box column. I have enabled the mutli-select property.
Please help me how to do that, Thank you
|
|
|
|
|
|
Why can't you use a checkbox if it is easier?
Since it's a "touch screen", I assume the "public" will be using it.
The "public" is generally familiar with widgets such as "checkboxes", "radio buttons", "movers", "selected color", etc. and how they work when it comes to "selecting" or "showing" selections.
You're not doing anyone any favors if you think you have found a "new" way to show selected items.
Anyway, even if you use a checkbox, you can still "hide" it.
|
|
|
|
|
I would like to try out for a small side project where:
I load up 7 (and maybe 10) images one on top of the other. With a slider I would like to make the first image more and more transparent (showing the second image) and sliding more and more, each of the "layers" is shown. it has to be "fluent" though, so not a "show/noshow", but rather a percentage transparent.
If that should ever work, I would like to try to do the same, but with multiple "timelapse". In effect, playing 7 (or 10) "videos" at the same time and sliding down/up, but if the first thing would work, I'll already be quite happy.
Does anyone know a good tutorial or article for this? google was not really helpful (except that stacking pictureboxes in winforms isn't going to work), most entries are about png transparency. WPF is not a problem.
If I get it to work, I promise an article
|
|
|
|
|
One way to find out is to look at GIMP - it's open source, as you know - it has Layers, whose Opacity can be individually adjusted via a slider.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|