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: 
Microsoft's XNA Framework uses structures for its [Vector2](http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2(v=XNAGameStudio.31).aspx)/[3](http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector3(v=XNAGameStudio.31).aspx)/[4](http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector4(v=XNAGameStudio.31).aspx) data types. These contain fields of type `float`. I don't see anything wrong with doing the same; using fields of type `double` shouldn't make a big difference.
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>