So ive been searching for a few weeks on and off to find the best way to store multiple unique classes inside a list, and then still being able to acces the class specific properties with as much flexibility as possibe, i think this picture explains my problem well enough

(ofcourse you get an error in this example saying that “damage doesn’t excist in the IItem interface”, but my point is that i want to get the value damage somehow when only having acces to the IItem interface, and not the actual sword class.)
Ive come up with several ways of doing this, but i don’t know which i should pick, or if there are others that are better (more flexible, faster, simpler, etc)
Using interfaces:
Pros:
Easy to keep track of, i guess, and the only way i got it to work using interfaces, since i dont know how to get the class that is using the interface i have a reference to
Cons:
Could be expensive (atleast more expensive than using direct references)
No keywords (aka when you type some parts of a variable, and the rest auto completes)
Using inheritence:
I tried this one, and while i got it to work the same way as interfaces, it was not as flexible, and more messy as many has already explained on this forum before
Pros:
Less text to write, since you can inherit variables such as damage, armor, etc
Cons:
Less flexible in the long run (for example if you want a item to be both a weapon and armor)
Having a items class with every possible variable declared in it, but with different constructors for every possible item:
Pros:
really easy to set up and to create new item types
you get autocomplete
Cons:
Probably takes a lot of memory over time (with hundereds of items and unique variables), although im not too sure if declared but unassigned variables takes a lot of space
Items will become a huge class, requiring a whole lot of regions to sort everything
So, which one should i pick, or is there a better way of doing this?
Please let me know if you have any idea, ive been trying to do this for weeks now
