Question: I am creating a geometry library in C# and I will need the following *immutable* types:

* `Vector2f` (2 `float`s - 8 bytes)
* `Vector2d` (2 `double`s - 16 bytes)
* `Vector3f` (3 `float`s - 12 bytes)
* `Vector3d` (3 `double`s - 24 bytes)
* `Vector4f` (4 `float`s - 16 bytes)
* `Vector4d` (4 `double`s - 32 bytes)

I am trying to determine whether to make them structs or classes. [MSDN](http://msdn.microsoft.com/en-us/library/ms229017.aspx) suggests only using a struct if the size if going to be no greater than 16 bytes. That reference seems to be from 2005. Is 16 bytes still the max suggested size?

I am sure that using structs for the `float` vectors would be more efficient than using a class, but what should I do about the `double` vectors? Should I make them structs also to be consistent, or should I make them classes?

**Updated:**
Looks like the everyone agrees they should be structs. Thanks for the great answers.

Answer: 
In my opinion I would go with structs for this, since they would be allocated on the stack most times this would reduce the pressure on the GC so your application should run smoother.

One tip, your methods that opperate on the structs should probably take the arguments as ref and out arguments, this will reduce the amount of copying of the data that takes place when passing and returning structs.
Structs are (usually) stored on the stack, which *might* make them more efficient, but probably not enough to make a noticeable difference.

<http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c-b3f6-40b5-98b5-413b6d348b91>