Please, consider that if you make Transform a struct:
If you return this on modification methods, all data has been copied, but if you no use it... there are a minimal waste of processes. Personally I recomend you to do some classic methods, for example, SetRST, SetSRT, etc
Another thing to remember is (this is very important for classes too), when you contains an array, this array will not be copied with a structure (or a class).
For example:
struct Matrix{
float[] Values{get;set;}
float NotArrayValue{get;set;}
}
If you copy the Matrix structure... "Values" is like a pointer, so... if you make this:
Matrix m1 = new Matrix{ Values = new float[]{ 1f, 2f, 3f }, NotArrayValue = 25f };
Matrix m2 = m1;
m1.Values[0] += 100f;
m1.NotArrayValue += 100f;
Console.Writeline(m2.Values[0]);
Console.Writeline(m2.NotArrayValue);
the result is:
101
25
So, is like with arrays, C# manages a pointer to array, so, please consider that if you make Transformations be structures, remember to do a Marshal.Copy (or Clone) with this array, I recommend you to make a "Clone" function. (this is the standar that c# use with arrays)
Instead of write "m2 = m1;" you must write "m2 = m1.Clone();" (only needed if you want to modify internal matrix values.)