|
Yes, if the variable is a local variable in a method, it's in the stack frame.
If it's a member variable in an object, it has to send a reference instead. Or perhaps fix the object to keep the GC from moving it, so that it can send a pointer to the member.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Thanks Simon.
Simon Stevens wrote: Why do you want to pass a reference type by value?
I pass an object that's part of a collection. The object needs to be editable, but not updated in the collection until later depending on certain criteria (sometimes much later after several significant changes have been made at different points).
As I said, I've found a workaround, but wondered if there was an easier/better way.
Dave
|
|
|
|
|
It sounds like your talking about some kind of transactionalised editing.
I.e, you pass the collection of objects to a form, allow the user to edit and make changes, but if they click cancel you want to roll back the changes, but if they click ok, you commit the changes to the objects.
Several options.
1) Just make the changes on the objects immediatly, but if the criteria occurs that requires a cancel, reload the objects from their original source (i.e. the database)
2) Take a copy of the objects, make the changes on the copies, only commit the changes to the main objects when the criteria occurs that requires a commit. (Sounds pretty much like what you are doing already with the structs)
3) Take a copy, make the changes on the original, restore the originals from the copies if a rollback is required.
4) Record all changes to the object, if a rollback is required, reverse the changes one by one.(kind of like an undo button)
Simon
|
|
|
|
|
Why would you want to do that?
|
|
|
|
|
|
|
DaveyM69 wrote: I looked at cloning but the shallow/deep issues seemed to be more trouble than they were worth!
Use BinaryFormatter class and serialize the object to a MemoryStream instance. Create a new object and deserialize the MemoryStream and return. But this method is slow. BTW, why do you want to pass reference types as value ?
|
|
|
|
|
N a v a n e e t h wrote: BTW, why do you want to pass reference types as value ?
here[^]
Dave
|
|
|
|
|
DaveyM69 wrote: pass a reference type by value
All references are passed by value.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
Dave
|
|
|
|
|
CPallini wrote: All references are passed by value. [Big Grin]
Naturally. A reference is a value type.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Guffa wrote: A reference is a value type
I didn't got it. Can you explain ?
|
|
|
|
|
|
DaveyM69 wrote: I looked at cloning
Most objects that have a "clone" method also have a "copy" method I believe. That might do what you want?
|
|
|
|
|
|
Lol, maybe you should reply that to the one who needs it
|
|
|
|
|
static void Main(string[] args)
{
Glut.glutInit();
I get a runtime error here "Cannot find freeglut.dll", while I downloaded this example code from the Code Project website.
I installed SDLdotNet runtime environment, and the Tao.OpenGL and Tao.FreeGlut References are available in the solution.
I haven't got a clue as to what is going wrong here, can someone tell me?
Did I post this message in the right area?
Ranger49
|
|
|
|
|
The first thing to try is putting freeglut.dll in the same folder as your .exe.
|
|
|
|
|
Alan Balkany wrote: The first thing to try is putting freeglut.dll in the same folder as your .exe.
But 1) freeglut.dll was not in the SDL-sdk-win32-exe that I installed. And 2) I am using VC#2008 which works with .NET and I don't think VC#2008EE generates executables.
Thanks so much for telling me this, but I think I already tried this...
Ranger.
|
|
|
|
|
It's possible freeglut.dll was installed at a different location. Try using Windows Explorer to search your hard disk for this file. If you don't have it, your application won't run.
(I have a hard time believing your compiler doesn't generate executables.)
|
|
|
|
|
I mapped my local folder from remote server. now am trying to run applicaiton(EXE FILE) from mapped network drive (which is in remote server) it opens a window with two options run and cancel. when click run the window goes off. it is not displaying any error messages. where am going wrong.
am using framework 2.0 and c# winforms.
|
|
|
|
|
I guess it's a security issues. you try to start your app over network, which requires extended policies. you'll need to register your assembly in .net policies
|
|
|
|
|
am unable to understand your solution. Can you explain in detail? start appl over network, what this mean?
if I open the application, it is running in local and remote system. after mapping only am getting problem. it is not showing any error message. simply window goes off.
|
|
|
|
|
How to convert the following code written in VB.Net to C#.Net?
Private P As New Collection
Thanks.
|
|
|
|
|
VBA.Collection p = new VBA.Collection()
.. or use a more specified type of collection, like ArrayList
|
|
|
|