A derived type must call SetIsOwned from its constructor if they own (or will own) the buffer. A derived type must call SetIsImmutable from its constructor if they want the buffer to become permanently immutable after it is stored inFSharedBuffer, forcing MoveToUnique() to clone it. A derived type must call SetIsMaterialized from its constructor, unless it implements deferred materialization by overriding MaterializeBuffer.