Я, наконец, продолжил изучение принципов ООП, и сейчас я делаю простую игру. Вот ситуация: У меня есть один абстрактный класс под названием Элементы, которые содержат все возможные атрибуты элемента как свойства и качество этого пункта как перечисление:C# Сделать свойства видимыми, если условие выполнено
public enum ItemQuality
{
Common,
Uncommon,
Rare,
Epic,
Legendary
}
public abstract class Items
{
public ItemQuality ItemQuality { get; set; }
public int Stamina { get; set; }
public int Strength { get; set; }
public int Agility { get; set; }
public int Intelligence { get; set; }
public int Damage { get; set; }
public int Block { get; set; }
public int Armor { get; set; }
}
Я еще два класса под названием Оружия и Armor (они наследуют класс Items), и они содержат WeaponType и ArmorType соответственно, оба из которых также перечислены.
Рассмотрите следующую ситуацию: Я создаю новое оружие типа Sword, я могу дать ему значение для Blocking, но это оружие, которое он не может заблокировать. Я хочу, чтобы различные свойства были видны в зависимости от типа Оружие/Броня.
Weapon weapon = new Weapon();
weapon.WeaponType = WeaponType.Sword;
weapon.Block = 5;
В этом случае я не смог бы увидеть свойство Block.
Чтобы идти еще дальше, я не хочу создавать экземпляры оружия и доспехов отдельно от персонажа (у меня также есть класс символов).
Моя конечная цель сделать что-то вроде этого:
Character character = new Character();
character.WeaponType = WeaponType.Sword;
character.WeaponType.Damage = 10;
Или что-то вроде этого, я даже не уверен, что моя структура является правильным, так что я открыт для предложений! Спасибо!
Рассмотрите возможность использования интерфейсов вместо этого и используйте композицию вместо наследования. –
Возможно, узор декоратора может быть чем-то для вас. Таким образом, вы можете обернуть базовый класс декоратором, содержащим дополнительные свойства – LInsoDeTeh
Спасибо, ребята! Кажется, у меня есть намного больше, чтобы учиться :) – Darkbound