Size: a a a

2020 May 09

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Supernic3
Напиши нормальную иерархию.
Approx - Weapon особенно непонятно. Они относятся как-то друг к другу или нет?

Если ты хочешь написать Approx : Weapon, где Approx - это интерфейс, то Weapon так же должен быть интерфейсом.
ApproxWeapon как имя класса можно, я над именами еще не сильно запаривался, сейчас пытаюсь понять именно концкпт
источник

S

Supernic3 in CODE BLOG / C#
Барсик [SpamBlock]
ApproxWeapon как имя класса можно, я над именами еще не сильно запаривался, сейчас пытаюсь понять именно концкпт
<концепция>
В интерфейсе ты описываешь то, что должно быть у любого типа который его реализует.
</концепция>
источник

S

Supernic3 in CODE BLOG / C#
Напиши те методы и поля, которые должны быть и дальше реализуй интерфейс
источник

S

Supernic3 in CODE BLOG / C#
И ты можешь так же кастовать классы к интерфейсу, как и классы к родительскому классу
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Supernic3
И ты можешь так же кастовать классы к интерфейсу, как и классы к родительскому классу
окей, то есть когда мне надо будет вытянуть свойство Approx из обьекта класса Shootgun имея его в виде обьекта класса Weapon я могу написать


if(weapon is IApprox)
{
 var Apr = weapon as IApprox;
 str.Append("\nApprox: " + Apr.Approx);
}
источник

S

Supernic3 in CODE BLOG / C#
Барсик [SpamBlock]
окей, то есть когда мне надо будет вытянуть свойство Approx из обьекта класса Shootgun имея его в виде обьекта класса Weapon я могу написать


if(weapon is IApprox)
{
 var Apr = weapon as IApprox;
 str.Append("\nApprox: " + Apr.Approx);
}
Смотри.. Если у тебя приходит явный тип в метод (shotgun, к примеру) то каст тебе не нужен. Просто используй
shotgun.Approx
Если тебе в метод приходит
IApprox
- просто пиши
weapon.Approx
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Supernic3
Смотри.. Если у тебя приходит явный тип в метод (shotgun, к примеру) то каст тебе не нужен. Просто используй
shotgun.Approx
Если тебе в метод приходит
IApprox
- просто пиши
weapon.Approx
в метод приходит тип Weapon
источник

S

Supernic3 in CODE BLOG / C#
Weapon реализует IApprox?
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
нет, но некоторые классы производные от него реализуют

вот из них, нужно при надобности вытянуть свойство
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
короче налажал я с наследованием, да?
источник

S

Supernic3 in CODE BLOG / C#
Барсик [SpamBlock]
нет, но некоторые классы производные от него реализуют

вот из них, нужно при надобности вытянуть свойство
В твоём случае - каст нужен. Правильно написал код
источник

S

Supernic3 in CODE BLOG / C#
Хз, тут смотря как у тебя что работает))
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Supernic3
Хз, тут смотря как у тебя что работает))
оно то работает, просто хочу понять как правильно
источник

S

Supernic3 in CODE BLOG / C#
Барсик [SpamBlock]
оно то работает, просто хочу понять как правильно
В каждом случае - индивидуально.
Но, вообще, тот код, что ты написал с if is approx - корректный.
источник

S

Supernic3 in CODE BLOG / C#
Но лучше напиши так ещё:
источник

S

Supernic3 in CODE BLOG / C#
if(weapon is IApprox apr)
источник

S

Supernic3 in CODE BLOG / C#
Сразу будет переменная без двойного каста и проверки на инмплементацию
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
понял, спасибо!
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
а вообще что в таком случае лучше, интерфейс или класс-обертка?
источник

AM

Azure Mynn in CODE BLOG / C#
Если свойство будет 100% только у оружия, то лучше в класс абстрактный
источник