Inheritance with generic types can sometimes be tricky.
If you would inherit from a Stack<double>, no problem, but what if you want to keep it as generic as possible?
Maybe it's a bad idea, but I wrote something like
class Stacker<T> : Stack<T> and in Stacker I implemented some arithmetic methods like divide now if T is a double, all is well, but if T is a Person class? To divide two Persons would be hard to do. So our smart C# compiler does not let you use arithmetic operators here. This means T + T or T / T etc. are not allowed. Luckily the designers of C# thought of that too and introduced the
dynamic keyword. Which essentialy overrides the compiler checking in this case.
So before using arithmetic methods, it has become the resposability of the programmer to do the the checking here.
The extra methods I wrote are just some help in making life easier in working with a stack. I left most of the error checking out, to make it a bit clearer. Enjoy!