public static void Main()
Item weapon = new Weapon();
Slot slot = new WeaponSlot();
var result = slot.CanEquip(weapon);
Console.WriteLine(result);
public abstract bool CanEquip(Item item);
class ArtifactSlot : Slot
public override bool CanEquip(Item item) => item.CanBeEquippedIn(this);
public override bool CanEquip(Item item) => item.CanBeEquippedIn(this);
public abstract bool CanBeEquippedIn(ArtifactSlot slot);
public abstract bool CanBeEquippedIn(WeaponSlot slot);
public override bool CanBeEquippedIn(ArtifactSlot slot) => false;
public override bool CanBeEquippedIn(WeaponSlot slot) => true;
public override bool CanBeEquippedIn(ArtifactSlot slot) => true;
public override bool CanBeEquippedIn(WeaponSlot slot) => false;