Unions in C#
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
I thought Nobody Screws With The Union[^].
I have lived with several Zen masters - all of them were cats. His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
-
I thought Nobody Screws With The Union[^].
I have lived with several Zen masters - all of them were cats. His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
Ah, but ... Part of the union[^]
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
-
I thought Nobody Screws With The Union[^].
I have lived with several Zen masters - all of them were cats. His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
When I first woke up this morning and during the pre-caffeination period when my eyes had not quite focused yet I read Unicorns in C#. Kinda the same thing eh?
Everyone has a photographic memory; some just don't have film. Steven Wright
-
When I first woke up this morning and during the pre-caffeination period when my eyes had not quite focused yet I read Unicorns in C#. Kinda the same thing eh?
Everyone has a photographic memory; some just don't have film. Steven Wright
I very much prefer unicorns over unions.
-
I very much prefer unicorns over unions.
Me too! We don't have much of either of them here in Florida though!
Everyone has a photographic memory; some just don't have film. Steven Wright
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
-
When I first woke up this morning and during the pre-caffeination period when my eyes had not quite focused yet I read Unicorns in C#. Kinda the same thing eh?
Everyone has a photographic memory; some just don't have film. Steven Wright
-
I was old enough to touch PASCAL & COBOL. but FORTRAN -No, I missed it by a whisker. My previous batches did have this in their syllabus, in schools. :-O
Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
Damn socialists unions, they've taken over C# !!!
I'd rather be phishing!
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
Vunic wrote:
oops just seeing it's not there natively. (Not sure why)
Union seems to me more or less meaningless in managed code. At least it it contrary to the philosophy of managed code: You don't have a "memory address" but a handle. The runtime system will interpret that handle, translating it to "some" memory address that you shouldn't care about at all. The runtime system has the right to to that handle-to-address mapping in whatever way it pleases: It can do a JIT compilation (for code handles) and put the result into the assembly cache, it can load the data object from some backing store (in principle even magnetic tape!) etc. A union says: Let these two logical objects (usually fields in a class/struct), the two handles, be translated to the same physical address. That would strongly restrict the freedom of the mapping operation of the runtime system. What if the alternative interpretations have different sizes? What if one alternative contains a partial object, addressed through a handle, while another is a flat array? What if one member is an accessor function? Or a delegate? What about a list object unionized with a string? If the semantics of overlaying wasn't unambiguously defined, it would be useless, so you would have to define all the details of cases like these mentiones, and the runtime system would have to imlement exactly that (rather hairy) semantics. I am really happy that we have kicked unions out the back door. If you really need that functionality, then you declare a byte array, to hold the "memory block", and define accessors that select parts of that byte array, and by shifting and masking and explicit casting provides other interpretations of the "memory block". It is not done behind the curtain, where the reader would have to know how the compiler and runtime system works on the bit level. Rather, you code it all yourself, explicitly and with a big warnig sign: Danger! Arbitrary, unchecked casts made here! Then you define the overlaying in every detail, completely independent of how the compiler and runtime system treats your data. Yes, it will cost you a lot of work. It should. To keep you away from doing it.
-
Vunic wrote:
oops just seeing it's not there natively. (Not sure why)
Union seems to me more or less meaningless in managed code. At least it it contrary to the philosophy of managed code: You don't have a "memory address" but a handle. The runtime system will interpret that handle, translating it to "some" memory address that you shouldn't care about at all. The runtime system has the right to to that handle-to-address mapping in whatever way it pleases: It can do a JIT compilation (for code handles) and put the result into the assembly cache, it can load the data object from some backing store (in principle even magnetic tape!) etc. A union says: Let these two logical objects (usually fields in a class/struct), the two handles, be translated to the same physical address. That would strongly restrict the freedom of the mapping operation of the runtime system. What if the alternative interpretations have different sizes? What if one alternative contains a partial object, addressed through a handle, while another is a flat array? What if one member is an accessor function? Or a delegate? What about a list object unionized with a string? If the semantics of overlaying wasn't unambiguously defined, it would be useless, so you would have to define all the details of cases like these mentiones, and the runtime system would have to imlement exactly that (rather hairy) semantics. I am really happy that we have kicked unions out the back door. If you really need that functionality, then you declare a byte array, to hold the "memory block", and define accessors that select parts of that byte array, and by shifting and masking and explicit casting provides other interpretations of the "memory block". It is not done behind the curtain, where the reader would have to know how the compiler and runtime system works on the bit level. Rather, you code it all yourself, explicitly and with a big warnig sign: Danger! Arbitrary, unchecked casts made here! Then you define the overlaying in every detail, completely independent of how the compiler and runtime system treats your data. Yes, it will cost you a lot of work. It should. To keep you away from doing it.
-
*That useful reply* in lounge threads. :) :thumbsup: thanks
Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
Vunic wrote:
*That useful reply* in lounge threads
:confused: Such a thing exists? :laugh:
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment "Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst "I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
-
Vunic wrote:
*That useful reply* in lounge threads
:confused: Such a thing exists? :laugh:
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment "Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst "I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
var unioned = new[] { "Hi" }.Union(new[] { "I'm unioned" });
From the top of my head, but it's a union and it should compile :D
Best, Sander sanderrossel.com Continuous Integration, Delivery, and Deployment arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly
-
I thought Nobody Screws With The Union[^].
I have lived with several Zen masters - all of them were cats. His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
We have Union in the Netherlands :-\ Union is the city bike brand[^]
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
-
My first real programming job was all FORTRAN. 'Cause Real Scientists Program In FORTRAN. It was especially fun when everyone insisted that variables be named a,aa,aaa,b,bb,bbb,b1,bb1 etc. For a bunch of smart people they were truly awful at organising (let along thinking through) code.
cheers Chris Maunder
-
My first real programming job was all FORTRAN. 'Cause Real Scientists Program In FORTRAN. It was especially fun when everyone insisted that variables be named a,aa,aaa,b,bb,bbb,b1,bb1 etc. For a bunch of smart people they were truly awful at organising (let along thinking through) code.
cheers Chris Maunder
Chris Maunder wrote:
Cause Real Scientists Program In FORTRAN.
And you were using it why?
Michael Martin Australia "I controlled my laughter and simple said "No,I am very busy,so I can't write any code for you". The moment they heard this all the smiling face turned into a sad looking face and one of them farted. So I had to leave the place as soon as possible." - Mr.Prakash One Fine Saturday. 24/04/2004