|
I think it was in the subtle bugs forum.
Today's lesson is brought to you by the word "niggardly". Remember kids, don't attribute to racism what can be explained by Scandinavian language roots.
-- Robert Royall
|
|
|
|
|
Ennis Ray Lynch, Jr. wrote: For object types while it is technically the same you can accidentally change the pointer reference if you are not careful
Well, that's the purpose of using the ref keyword on a reference type.
Ennis Ray Lynch, Jr. wrote: as objects are naturally passed by referenced
No, they are not. You have to distinguish between passing a reference as argument and passing an argument by reference.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Guffa wrote: No, they are not. You have to distinguish between passing a reference as argument and passing an argument by reference.
While you are technically correct most texts and online sources treat the value pass of a pointer to an object as a pass by value so what most people think is happening is a reference. Which is why I make the statements I did, most people do not know what actually happens behind the scenes and more often than not it creates strange bugs.
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
Most of this sig is for Google, not ego.
|
|
|
|
|
I figured this was a bit of pointer magic creating the subtle(ish) differences. I'm searching right now to find some info on what pointers are passed where and what values/pointers are changed etc in the two different scenarios. Not found much yet though.
Thanks for your clarifications.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
Ennis Ray Lynch, Jr. wrote: While you are technically correct most texts and online sources treat the value pass of a pointer to an object as a pass by value so what most people think is happening is a reference.
I see that your intention was to spread knowledge of this, but as your statement is technically incorrect, it doesn't do much to help...
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Objects are always addressed by reference as they are stored in the heap. The pointer to the object, which is hidden in C# is what is passed by value and reference. Both of our statements are technically correct as it depends on how you are looking at the problem. My statement does a lot of help because anyone that reads it at face value will say ... "Wow, I didn't know that I am going to do some more research".
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
Most of this sig is for Google, not ego.
|
|
|
|
|
Ennis Ray Lynch, Jr. wrote: Objects are always addressed by reference
That doesn't mean that they are passed by reference as parameters.
Ennis Ray Lynch, Jr. wrote: Both of our statements are technically correct as it depends on how you are looking at the problem.
No, your statement doesn't become correct regardless of how you look at it. Objects are simply not passed by reference unless you specify it with the ref keyword.
Ennis Ray Lynch, Jr. wrote: My statement does a lot of help because anyone that reads it at face value will say ... "Wow, I didn't know that I am going to do some more research".
And one of the first thing that they find out is that it is wrong, and say "Wow, what a wild goose chase I was fooled into".
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
I think you suffer from a fundamental misunderstanding of pointers and dynamic memory. Spend some time in c and come back to the subject when you are refreshed.
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
Most of this sig is for Google, not ego.
|
|
|
|
|
Ennis Ray Lynch, Jr. wrote: I think you suffer from a fundamental misunderstanding of pointers and dynamic memory. Spend some time in c and come back to the subject when you are refreshed.
I spent some time in C, as well as several other languages. If you can't see where you are wrong, I am afraid that it's you that lack some crucial understanding of how pointers work. Perhaps you should try some assembly language programming to get a firm grip about how everything works under the hood.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
There is a difference between passing a reference and passing a reference to a reference and I would have thought someone with assembly language experience would have known that.
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
Most of this sig is for Google, not ego.
|
|
|
|
|
Ennis Ray Lynch, Jr. wrote: There is a difference between passing a reference and passing a reference to a reference and I would have thought someone with assembly language experience would have known that.
I know the difference. If you also truly knew the difference you should not say that object are passed by reference. Or is it that you don't know the meaning of what you said?
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Hmm, interesting discussion. Maybe you're assuming references to behave like C++ references?
struct S
{
void SayHello() {}
}
void Caller()
{
S *s = new S();
Callee(s);
}
void Callee(S *p)
{
p->SayHello();
}
Will you agree that the instance pointed at by s is passed by reference?
|
|
|
|
|
S. Senthil Kumar wrote: Maybe you're assuming references to behave like C++ references?
Not at all.
S. Senthil Kumar wrote: Will you agree that the instance pointed at by s is passed by reference?
No, it's not a copy of the instance that is passed. It's the value of the variable s that is passed, which happens to be a pointer to the instance.
Was that code supposed to show an example of a C++ reference? Because it isn't.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Guffa wrote: No, it's not a copy of the instance that is passed. It's the value of the variable s that is passed, which happens to be a pointer to the instance.
Well, than can you write a snippet of code that demonstrates passing by reference? Because I can't see how *anything* can be passed by reference at all - ultimately, an address would have to pushed on to the stack and popped at the other end.
Guffa wrote: Was that code supposed to show an example of a C++ reference? Because it isn't.
That snippet of code wasn't meant to show C++ references.
|
|
|
|
|
S. Senthil Kumar wrote: Well, than can you write a snippet of code that demonstrates passing by reference?
Well, that's easy:
void GetAnswer(ref string answer) {
answer = "42";
}
string answer = null;
GetAnswer(ref answer);
S. Senthil Kumar wrote: Because I can't see how *anything* can be passed by reference at all - ultimately, an address would have to pushed on to the stack and popped at the other end.
Then you don't understand the concept of passing by reference. Usually a pointer or reference is passed on the stack, but it doesn't have to be implemented that way. The specification only says that the value of the variable will be updated when the control passes back to the calling method, so the value of the variable could actually be passed back and forth instead of a passing a pointer to the variable.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Guffa wrote: The specification only says that the value of the variable will be updated when the control passes back to the calling method, so the value of the variable could actually be passed back and forth instead of a passing a pointer to the variable.
I guess you are sticking to the C# spec's ref, which is similar to C++ references in that they "behave" like aliases. Passing by reference is a much more general concept. According to your theory, there's no difference between the following snippets of C++ code.
struct S
{
void SayHello() {}
}
void Caller()
{
S s;
Callee(s);
}
void Callee(S s)
{
s.SayHello();
}
and
struct S
{
void SayHello() {}
}
void Caller()
{
S s;
Callee(&s);
}
void Callee(S* s)
{
s->SayHello();
}
If the second snippet is not pass by reference, as you argued, then what would you call the difference in behavior between the two snippets?
|
|
|
|
|
DaveyM69 wrote: ref has to be preassigned but does not have to be used in the method
Correct.
DaveyM69 wrote: out must be assigned before returning but can be unassigned before calling the method
Correct.
DaveyM69 wrote: Just discovered that if using out, the parameter is treated as if it is unassigned (even if it's already been assigned) as soon as you call the method.
Even if you use a variable that has been assigned a value as an out parameter, that value is not sent to the method. The out parameter is only one way.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
I do not know why all of a sudden I can not uninstall my windows service.
I alway un-install as follows:
in visual studio 2008 command prompt:
installutil /u c:\windowsservicefolder\bin\debug\appname.exe
The message is:
The unistall has completed.
An exception occured while uninstalling. This exception will be ignored and the uninstall will continue. However, the application might not be fully uninstalled after the uninstall is complete.
Any thoughts please?
Thanks
|
|
|
|
|
You sometimes get this if you have the service manager open.
Bob
Ashfield Consultants Ltd
|
|
|
|
|
No, it is closed.
I even re-started the machine.
Any thoughts?
Thanks
|
|
|
|
|
I think Uninstallation is completed,exception may be cause of some dependency problem. check the Exception detail.
Cheers!!
Brij
|
|
|
|
|
Not sure where to check.
The exception I sent you is what the system gives...
|
|
|
|
|
Even if I create a simple i.e. with nothing to run windows service, I can not install it. It gives the same error.
|
|
|
|
|
arkiboys wrote: Not sure where to check.
You are kidding right? You don't know to check the event log?
led mike
|
|
|
|
|
hi,
All ok now.
I had to check the instal log which indicated issues with login.
Thanks
|
|
|
|