C# - How do you GetComponent of a child class that inherits from a specific class?

Allow me to explain what I mean.

I have a base parent class called Item.cs

And all the items’ scripts inherit from that one base class.

So if I wanted to get that specific child script as a component, how is that possible?

I want this to be dynamic so I can’t type specific names/scripts

Thanks for your time!

I think this answers what you mean. The short and painless answer to getting a specific child script by its’ type dynamically without actually searching for its’ type is… you can’t. However, you don’t need to do this.

Virtual and Abstract:

Virtual and Abstract can be used to make a method in the base script behave differently in a child script. The great thing about this is that say for example we have a script, “Sword,” that is a child of “Item.” We can get the sword as type “item” and call its’ function “sword.Equip()” that we defined in the “Sword” script. See here for a little more detail

Time for some pseudo-code, as this concept took some time for me to understand:

public class Item
{
    public virtual void Equip()
    {
        Debug.Log("Equipped an item.");
    }
}

public class Sword: Item
{
    public string swordName = "Sword of Death";
    public override void Equip()
    {
        base.Equip(); // This is not necessary, but it calls the Item.Equip() function as-is, in case you need it
        Debug.Log("Equipped item name is " + swordName");
    }
}

void EquipHoveredItem(GameObject hoveredItem)
{
    Item item = hoveredItem.GetComponent<Item>();
    if (item != null)
    {
        item.Equip(); // Debugs "Equipped an item." "Equipped item name is Sword of Death"
    }      
}

Now, if you wanted to get specific properties from one of your children script, then I would just put the property on your parent script. That way each item will have the property, but whether or not it is used depends on the item.