hmmm... What if you implement a function "SetMatrix(float[] aValues)" on your actual Transformation class?
You can do something like that:
//Basic DisplayObjects hierarchy
float[] parentTransform = mySprite.Transform.GetMatrix();
float[] childTransform;
foreach(Sprite child in mySpriteChilds){
childTransform = MyHelper.MultplyMatrixValues(parentTransform, child.Transform);
mySingleOneTransform.SetMatrix(childTransform);
//TODO: Draw child with childTransform
}
It's a bit more complex that struct's way, but at least you can continue using your Transform class.
Edit:
Whatever... I think the best way still can be to use another Transform struct (without bind to C Transform), and bind it only when you set a Transform by parameter.
Maybe, could be inefficient if you copy matrices every time when you set a transformation, but think about it... there are only 16 floats by matrix, this could be trivial process time, but if you use and instantiate new classes instead, not only is copying all the values, also is creating garbage (several times usually) by a single render call.
I think is crucial to make this a new structure and hide the original C Transform object to C#... no matter if you lose a little performance copying 16 floats every time that a Transform has been used, note that every time that you returns a new Transform, you are copying all values again and make a new instance of a class, I'm sure this is more slow than copy 16 floats to a C object one by one.
Correct me if I'm wrong, I never make a C# binding, and is possible that I'm ignoring something.