Is there a way to "AddListener(KeyboardEvent, callThisFunction)" so that it can be removed later ?

I understand that at this point we can use Input.GetKey (“q”) for example to listen to the key strokes.

In AS3 there is this amazing system where we can addEventListener(Keyboard.Event, CallThisFunction) and CallThisFunction() will be called on KeyBoardEvents, but we can later removeEventListener(Keyboard.Event, CallThisFunction) to stop the listener.

I want this because I don’t want the update function to be cluttered with a bunch Input.GetKey’s and also stop Unity from wasting valuable resource detecting Keystrokes.

Is there a way to do this in C# ?

You could create a class that checks for Input.GetKey, and if there is imput call An Event. Events in unity are similar to as3, as you can remove or add a listener
Check this out:
https://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

If you make you event public static, you can use it similarly to as3