C# Why do I have to use .AddComponent and not "new (ClassName)"?

I have a custom GameObject script that I would like to use, it has been working so far but now that I’m trying to add some text, it is giving me some weird functionality.

I have a class that acts as a controller and it instantiates gameobjects from a list after the list is deserialized (not shown here). I have PlayerObject.cs which I use for custom gameobjects. My problem is that the compiler keeps giving warnings saying I need to use MonoBehaviour and AddComponent rather than what I’m currently doing. Likewise, I’m having some weird behaviours when trying to take it beyond creating a basic animated object (using 2d toolkit).

It’s evident I’m doing this wrong, could someone please explain the proper way based on my code below, if possible? When I try to extend from MonoBehaviour with PlayerObject class I get errors. What I would like to know is the proper way to create a new custom gameobject, save it to a list of objects, so that I can later access that list and modify objects within the list. Not sure if I’m even asking this properly.

From Controller.cs:

//instantiate list of game objects after previously being deserialized from datastream and added to listObj.
Vector3 vector = new Vector3(listObj<em>.position.x, listObj_.position.y, listObj*.position.z);*_</em>

PlayerObject pObj = new PlayerObject();
pObj.gO = (GameObject)Instantiate(character, vector,Quaternion.identity);
pObj.playerId = listObj*.pId;*
pObj.gO.name = listObj*.name;*
playerObjects.Add(pObj);
From PlayerObject.cs:
public class PlayerObject {

* public int pId;*
public int health;
* public GameObject gO;*
* public tk2dSpriteAnimator spriteAnimator;*
* public tk2dSprite sprite;*
* public tk2dTextMesh textMesh;*
* public PlayerObject(int id)*
* {*
* pId = id;*
* }*
* public PlayerObject()*
* {*
* }*
// irrelevant code removed from post
}

pObj.GObject

should be

pObj.gO