Unless this code is running multithreaded, if the player is firing in automatic mode the code will be completely blocked forever, since the bool argument will not change once inside the while loop. If it is multithreaded, this class instance will lock up in automatic mode, eventually throwing an overflow exception when this.ClipComponents (which isn't actually a member, by the way) reaches the low limit of an integer.
This.ClipCompenents doesn't exist as a member so that will cause an error, though this is likely a typo and not a design flaw. Also, there's a bit of naming conflicting going on - theres an enum called FireMode, a member called FireMode, and an argument to Fire() that is called FireMode of type FireMode. This will cause quite a few errors.
Have you actually used this code in an application?