An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
Why should we write OnThresholdReached method?
You do not have to use a method, see example below
Why this method should be protected?
You don't have too unless there is a business rule, see the docs
Why this method should be vitrual?
Same as protected see the docs
Run the code https://dotnetfiddle.net/RM5QNj (I tried to post the code but got messed up)