The important thing to note when using a delegated property is that the class using the delegate (in your case PositiveNumber does not have a backing field for the property. Normally, it is the delegates responsibility to hold the value. The class using the delegate just delegates all reads and writes on that property to the delegate. In your case, that means that whenever the number property of a PositiveNumber is accessed, it calls one of the methods on the delegate. The delegate in turn tries to access the number property of the PositiveNumber. This results in infinite recursion.
For the case you present, I would not really consider a delegated property to be the right solution. In your case, I would just implement PositiveNumber.number as a normal non-delegated property with a custom setter. Alternatively it could be an inline class.