IDiffSpread is only implemented by the managed pin wrapper classes which in turn ask the underlying native pin whether or not the data changed between the last evaluation and now.
however the Spread class manages a changed flag itself, which gets set whenever something gets written to it. it doesn’t compare the value, it simply sets the flag to true if some value gets assigned to any of its slices. to reset the flag you’ll need to call the method Flush.
Spread<uint> mySpread = new Spread<uint>();
// or simply
var mySpread = new Spread<uint>();
mySpread[0](0) = 1;
// mySpread.IsChanged == true
mySpread.Flush();
// mySpread.IsChanged == false
but i don’t see how that little feature would be useful…it was merely introduced in order to keep marshaling costs to a minimum.