Game Objects are not their scripts [Unity]

Okay, perhaps this goes without saying. But it was one part of Unity that I didn't quite "get". Let's say I'm trying to get the thing that was touched on the screen.

Vector2 v = Camera.main.ScreenToWorldPoint(finish);
Collider2D c = Physics2D.OverlapPoint(v);
if (c != null) {
  GameObject go = c.gameObject;

And since the only thing these could be is my Rainblock objects, I would want to tell the game engine to parse a move at that Rainblock's position. But casting that object to the Rainblock class was giving me an error. And I was scratching my head super hard here. If the GameObject is not a Rainblock then what the hell is it?

Well, it's a GameObject. It's that simple. The Rainblock is a component of the particular GameObject. So I do this:

Rainblock r = c.gameObject.GetComponent<Rainblock>();

A script contains the code that is the object that tells the GameObject what to do but it is not the object itself.