|
I seal what you did there!
|
|
|
|
|
That's otterly shamuful!
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
You'd prefer some otter joke?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I squid you not when I say that would be a ray of hope.
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
I really think you otter.
Just because the code works, it doesn't mean that it is good code.
|
|
|
|
|
You otter drink water instead.
Someone's therapist knows all about you!
|
|
|
|
|
Dugong get it then - Walrus'ed off our feet at the moment.
|
|
|
|
|
(Programming Survey Of The Whenever I Feel Like It)
Example (example only, don't ask what or why):
Processing.Fire(this, new ProcessEventArgs()
{
FromMembrane = fromMembrane,
FromReceptor = fromReceptor,
ToMembrane = membrane,
ToReceptor = target,
SemanticType = obj
});
vs.
Processing.Fire(this, new ProcessEventArgs(fromMembrane, fromReceptor, membrane, target, obj));
Which form do you prefer? Why?
The former form from which I observe my style seems to be the preferable format. Not sure why though.
modified 13-Oct-17 10:04am.
|
|
|
|
|
because the second wont compile? (missing close bracket)
Installing Signature...
Do not switch off your computer.
|
|
|
|
|
Lopatir wrote: because the second wont compile? (missing close bracket)
Fixed. The second one was hand-written rather than from a working example.
|
|
|
|
|
A. Explicit params are good vs implicit [by position] but your symbol names take me to... youtu.be/zAlNrtcPCLw one of the most annoying songs in recent history
... such stuff as dreams are made on
|
|
|
|
|
|
I would like the bottom form if the number of parentheses matched. The top form is more difficult to match up what belongs with what. My real preference would be:
(
this,
new ProcessEventArgs()
{
fromMembrane,
fromReceptor,
membrane,
target,
obj
}
)
|
|
|
|
|
Jim_Snyder wrote: I would like the bottom form if the number of parentheses matched.
Wow, people's eyes are good. Fixed, but still inline. But I like your version.
|
|
|
|
|
For some Markdown Formatting reason, I cannot get Processing.Fire to display in the block.
|
|
|
|
|
Jim_Snyder wrote: For some Markdown Formatting reason, I cannot get Processing.Fire to display in the block.
Bizarre. Works for me!
[edit] Oh, in you're example. Yeah, I was wondering about that. [/edit]
|
|
|
|
|
Depends - if I can reasonably name the variables "almost like" the argument names (e.g. "targetReceptor" instead of "target") and if I have no reason to use an expression as parameter then I go for the second form because I don't feel the first form would increase the clarity of the code.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
The first sort of feels clunky but it is much safer.
Someone will one day insert a field in the middle of the others and the thing will go kaboom(I hope I am not being too technical in my language here).
“That which can be asserted without evidence, can be dismissed without evidence.”
― Christopher Hitchens
|
|
|
|
|
GuyThiebaut wrote: insert a field in the middle of the others and the thing will go kaboom
Good point.
|
|
|
|
|
|
As always, the only valid answer is: it depends.
Does it make sense for the properties to be writeable? Particularly in an EventArgs class, where you probably don't want one rogue handler to change the data that other handlers see.
If you have lots of parameters, and you don't always need to pass all of them, an object initializer might be cleaner. But you could do something similar with optional parameters, or provide constructor overloads for each valid set of parameters. And if you're in that situation, it might be time to refactor the class anyway, because it's probably breaking the SRP.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Richard Deeming wrote: Does it make sense for the properties to be writeable?
5! Yes, that's the hidden "gotcha". When using a constructor, the class can be initialized like this:
public class ProcessEventArgs : EventArgs
{
public IMembrane FromMembrane { get; protected set; }
public IReceptor FromReceptor { get; protected set; }
public IMembrane ToMembrane { get; protected set; }
public IReceptor ToReceptor { get; protected set; }
public ISemanticType SemanticType { get; protected set; }
public ProcessEventArgs(IMembrane fromMembrane, IReceptor fromReceptor, IMembrane toMembrane, IReceptor toReceptor, ISemanticType st)
{
FromMembrane = fromMembrane;
FromReceptor = fromReceptor;
ToMembrane = toMembrane;
ToReceptor = toReceptor;
SemanticType = st;
}
}
Note the protected setters.
|
|
|
|
|
Or better yet, like this:
public class ProcessEventArgs : EventArgs
{
public IMembrane FromMembrane { get; }
public IReceptor FromReceptor { get; }
public IMembrane ToMembrane { get; }
public IReceptor ToReceptor { get; }
public ISemanticType SemanticType { get; }
public ProcessEventArgs(IMembrane fromMembrane, IReceptor fromReceptor, IMembrane toMembrane, IReceptor toReceptor, ISemanticType semanticType)
{
FromMembrane = fromMembrane;
FromReceptor = fromReceptor;
ToMembrane = toMembrane;
ToReceptor = toReceptor;
SemanticType = semanticType;
}
}
(Assuming you're using the C# 6 compiler or later. Otherwise, private set; would have a similar effect.)
Also, named parameters can make the constructor look more like the object initializer:
Processing.Fire(this, new ProcessEventArgs(
fromMembrane: fromMembrane,
fromReceptor: fromReceptor,
toMembrane: membrane,
toReceptor: target,
semanticType: obj
));
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
modified 13-Oct-17 10:32am.
|
|
|
|
|
Richard Deeming wrote: Also, named parameters can make the constructor look more like the object initializer:
Ah, I've never used that syntax in C#. And yes, omitting the setter or marking it private too.
|
|
|
|
|
Richard Deeming wrote: Also, named parameters can make the constructor look more like the object initializer:
Now that I think about it, I have used that syntax, in ASP.NET/Razor. Personally, I think the only reason they added that form of initialization was so that people used to JSON object initialization in JavaScript would be comfortable.
|
|
|
|