typemask and type are null

what I’m trying to do is avoid having to push a button and allowing this info to pass on start instead, the button works and passes the selected type but in the start function it is null, ive tried multiple ways and its always null I have a suspicion but cant find any info on it, that its because one derives from monobehavior? is there a simple way to make this function work?

using UnityEngine;    
    namespace CharacterEditor
    {
    	public class characterLo : TextureTypeMaskSelector
    	{
    		public int which;
    		 public characterLo instance;
    
    
    		protected override void OnClick()
    		{
    			TextureManager.Instance.OnNextColor2(which,types); //types work here
    		}
    
    
    		 void Start()
    		{
    			instance = this;
    			instance.types = types; // ?
    				
    			Debug.Log ("whats going on");
    			Debug.Log (instance.typeMask);
    
    			if(Application.loadedLevelName != "CharacterCreation"){
    
    				string SaveLoadSlot = PlayerPrefs.GetInt ("Player_SaveLoad_Slot").ToString();
    				instance.which = PlayerPrefs.GetInt (SaveLoadSlot + instance.typeMask.ToString() + "Color",1);
    
    
    				TextureManager.Instance.OnNextColor2(instance.which, instance.types);
    				//doesnt work as "types" or "instance.types" >>>>returns null<<<<
    			}
    		}
    
    
    	}
    }

You did not override the virtual Start method in your derived class and you did not call base.Start() in your derived method. That means the code in Start in your abstract base class is never executed.