public string ItemName { get; init; }
public class WeaponData : ItemData { }
public ItemData Data { get; init; }
public Item(ItemData data)
public class WeaponItem : Item
public WeaponItem(WeaponData data) : base(data) { }
public override string ToString() => Data.ItemName;
public static T CreateNewItem<T, TD>(TD data)
return (T)Activator.CreateInstance(typeof(T), data);
static void Main(string[] args)
var bestWeaponEver = new WeaponData() { ItemName = "Dragon Slayer" };
var amazingWeaponItem= CreateNewItem<WeaponItem, WeaponData>(bestWeaponEver);
Console.WriteLine(amazingWeaponItem);