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: 
I would generally make types like these structs. Structs are more likely to be placed on the stack, and if you use arrays with them, you can get much nicer peformance than if, say, you were to use a List<> of objects. As long as you stay away from operations which will cause your vector classes to be boxed, the struct is the generally going to be the higher performance way to go.
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>