Pointer in C#
-
Wow. If you are quite new to C# this is very ambitious (to say the least). Good luck... Regards Thomas
www.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Programmer - an organism that turns coffee into software.It's about a year that I'm new to C#! I never encountered any serious problem unless I wanted something that no one thought of before in Microsoft Visual C# team. I have been coding in C++ for some years mostly in MFC. Now when making a new design I believe language is not much of a problem. This problem existed in MFC and now it exists in MS windows forms. I don't like using events for every task. I just decided to test some new ways of doing that. Most probably someone already did that. Maybe I have been too lazy not to search enough or a bit unlucky(I searched actually.)
Thomas Weller wrote:
Good luck...
Thank you and thanks for the help. :)
"In the end it's a little boy expressing himself." Yanni
modified on Wednesday, November 26, 2008 6:11 AM
-
I think it's more accurate to say that everything in .Net is a pointer.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
-----
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001Well, when you think of a pointer simply as a memory address, then of course you are right. But normally, when programmers say 'pointer', they refer to a concept like the one known from C/C++. And this simply does not exist in .NET (at least not in the safe part of it). (edited to correct a typo...) Regards Thomas
www.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Programmer - an organism that turns coffee into software.modified on Wednesday, November 26, 2008 5:54 AM
-
You can access a pointer in C#, but you almost never need to. Any class is passed by reference, so you can have more than one reference to the one object, as you would with a pointer. An int is a value type, so this does not hold true. You could use int?, I assume that is a class, not a struct (structs are passed by value, not by reference ). The other thing you can do is use delegates to tell clients when a value changes, to get the same effect.
Christian Graus Driven to the arms of OSX by Vista.
AFAIK,
int?
is equivalent toNotNullable
, which is a struct. -
AFAIK,
int?
is equivalent toNotNullable
, which is a struct.It's exactly the other way round. The
int
data type is a value type (i.e. a struct), which means that it is not nullable by design.int?
is a syntactical enhancement that is equivalent toNullable<int>
. Regards Thomaswww.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Programmer - an organism that turns coffee into software. -
It's exactly the other way round. The
int
data type is a value type (i.e. a struct), which means that it is not nullable by design.int?
is a syntactical enhancement that is equivalent toNullable<int>
. Regards Thomaswww.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Programmer - an organism that turns coffee into software.Sorry, I wrote the "Not" by mistake :-O.
Nullable<int>
is a struct. -
Hi, I want a class to have a pointer to a local variable of another class to change it later. In C++ I do it this way:
class AClass
{
public:
int *m_pInt;AClass(int\* pInt) { m\_pInt = pInt; }; void SomeFunc() { \*m\_pInt = 20; };
};
class B
{
int x;
AClass a(&x);
};Is it possible to do this in C# using safe types? I'm still new to C#, so excuse me if this is a dumb question.
"In the end it's a little boy expressing himself." Yanni
Pass by reference is supported in C# and VB.net. So I guess you can use that. Just search for their sample usage in MSDN
------------------------------------------- It's code that drives you - Shyam
-
Pass by reference is supported in C# and VB.net. So I guess you can use that. Just search for their sample usage in MSDN
------------------------------------------- It's code that drives you - Shyam
I know pass by reference. The problem was to hold the reference and change it's value later on. It looks like as I thought it's only possible by wrapping a struct type inside a class and sending reference to that class and using it to access the struct inside or sending a reference to current class that this struct is a member of which is another way of saying same statement. From kind help of others I conclude it this way: To store for later access to a state of another class, we need to have that class. If I was using my brain before asking the question, it was obvious. C# keeps track of references to objects. If someone uses internal data of an object without accessing a reference to that object how can garbage collector find out that it has to keep an object alive even if no one has any reference to that object. No reference = removing it and now a reference to a type inside an object that does not exists is what we ended up. That maybe why we must use class to access it's members. Also as stated earlier it's absolutely a bad design. Thanks for the help anyway.
"In the end it's a little boy expressing himself." Yanni
-
You can access a pointer in C#, but you almost never need to. Any class is passed by reference, so you can have more than one reference to the one object, as you would with a pointer. An int is a value type, so this does not hold true. You could use int?, I assume that is a class, not a struct (structs are passed by value, not by reference ). The other thing you can do is use delegates to tell clients when a value changes, to get the same effect.
Christian Graus Driven to the arms of OSX by Vista.
Christian Graus wrote:
I assume that is a class, not a struct
Navaneeth How to use google | Ask smart questions
-
I think it's more accurate to say that everything in .Net is a pointer.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
-----
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001I think that's only true for reference types. Values types (for example) have the actual values pushed onto the stack when passing them as parameters. I think they're handled identically to value types in C++.
-
Hi, I want a class to have a pointer to a local variable of another class to change it later. In C++ I do it this way:
class AClass
{
public:
int *m_pInt;AClass(int\* pInt) { m\_pInt = pInt; }; void SomeFunc() { \*m\_pInt = 20; };
};
class B
{
int x;
AClass a(&x);
};Is it possible to do this in C# using safe types? I'm still new to C#, so excuse me if this is a dumb question.
"In the end it's a little boy expressing himself." Yanni
Technically it is possible using boxing (http://www.csharphelp.com/archives/archive100.html[^]). You can use an object for your local variable, and assign any value type to it. If you pass this object as a parameter, its reference (address) is passed, so the called method can change the local variable of your class.