Size: a a a

CODE BLOG / Чат

2020 May 09

SG

Spectra GameSport in CODE BLOG / Чат
Bars0_o [SpamBlock]
пытаюсь таки побороть интерфейсы, вот разгребаю свой старый курсач

есть класс Weapon, от него наследуются классы DefaulWeapon, Gatling, Shotgan,Laser

Shotgun и Gatling должны иметь свойство Approx,которое потом нужно для выведения статисткики, на которая принимает класс Weapon.

для этого я выделил Approx в интерфейс IApprox, в него вынес непосредсвенно свойство, унаследновал like
public class Gatling : Weapon,IApprox

теперь мне нужно "вытащить" это свойство, как мне это сделать?

пытался что то типо

               if(weapon is IApprox)
               {
                   str.Append("\nApprox: " + (IApprox)weapon.Approx);
               }

но это не сработало, как сделать правильно?

или проще сделать класс-обертку Approx : Weapon с этим полем и наследоваться от него like
public class Gatling : Approx
Почему не сделать метод для "вытаскивания" в базовом класе, можешь абстрактным сделать и перегрузить? Или тебе так не подходит?
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
Spectra GameSport
Почему не сделать метод для "вытаскивания" в базовом класе, можешь абстрактным сделать и перегрузить? Или тебе так не подходит?
Бля, а можно же.........
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
Хотя фигня будет, его придется перегружать все равно
источник

SG

Spectra GameSport in CODE BLOG / Чат
Хотя да, там у тебя такая ситуация)
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
ну можно будет дергать из base, и к полученной просто приклеивать еще и последнее свойство
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
но я хз насколько это правильно
источник

SG

Spectra GameSport in CODE BLOG / Чат
Ты хочешь работать с weapon как с IApprox но проблема в том что сам weapon не IApprox, а лишь некоторые его наследники. По этому ты не сможешь это сделать в таком плане.
источник

SG

Spectra GameSport in CODE BLOG / Чат
но ты можешь сделать метод типа getStats(){}.. не обязательно абстрактный что бы лишний раз не перегружать. И по стандарту можешь вывести какое то базовое значение, а где надо специфическое и тогда будет более менее.
источник

SG

Spectra GameSport in CODE BLOG / Чат
Надо будет и мне интерфейсы посмотреть, потому что я пока пользуюсь классами в стиле с++) Не потому что мне лень, просто очень удобно пока что)
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
Spectra GameSport
но ты можешь сделать метод типа getStats(){}.. не обязательно абстрактный что бы лишний раз не перегружать. И по стандарту можешь вывести какое то базовое значение, а где надо специфическое и тогда будет более менее.
вот думаю над этим щас
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
хотя моя ебала щас классно выглядит
источник

4

4g in CODE BLOG / Чат
Spectra GameSport
Надо будет и мне интерфейсы посмотреть, потому что я пока пользуюсь классами в стиле с++) Не потому что мне лень, просто очень удобно пока что)
Это зависит от задач. Но попрактиковаться не помешает.
источник

SG

Spectra GameSport in CODE BLOG / Чат
4g
Это зависит от задач. Но попрактиковаться не помешает.
Вот и я так думаю)
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
окей, а насколько херово если есть цепочка классов, перегружать в каждом их них этот метод с небольшой прибавкой?

то есть образно есть класс Part, в нем в GetInfo вывести имя и вес, далее в классе Weapon перегрузить чтоб Getinfo возвращал base.Getinfo+образно скорострельность и уров +  чтоб в классе наследниике "дробовик" в Getinfo выводилось base.Getinfo (получается все от Weapon+от Part)+ образно разброс....
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
сильно херовая идея?
источник

SG

Spectra GameSport in CODE BLOG / Чат
Вроде как так и должно быть)
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
это проще в реализации, нет дублируешего кода, но по идее не особо читабельно, ибо чтоб узнать что в конечном итоге возвращает класс "дробовик" нужно прошерстить цепочку из 3-4 классов
источник

4

4g in CODE BLOG / Чат
Bars0_o [SpamBlock]
окей, а насколько херово если есть цепочка классов, перегружать в каждом их них этот метод с небольшой прибавкой?

то есть образно есть класс Part, в нем в GetInfo вывести имя и вес, далее в классе Weapon перегрузить чтоб Getinfo возвращал base.Getinfo+образно скорострельность и уров +  чтоб в классе наследниике "дробовик" в Getinfo выводилось base.Getinfo (получается все от Weapon+от Part)+ образно разброс....
Затрахаешься потом отлаживать.
Сильно унаследованный класс крайне неудобно отлаживать - порой вызов метода или цепочка вызовов уйдет глубоко. Но! Если отладить каждый класс на своем уровне - почему бы нет, если это решает вопросы задачи.
источник

SG

Spectra GameSport in CODE BLOG / Чат
Ну это да, но как по другому предлагаешь) Если не сильно большая иерархия то будет окей.
источник

B[

Bars0_o [SpamBlock] in CODE BLOG / Чат
Spectra GameSport
Ну это да, но как по другому предлагаешь) Если не сильно большая иерархия то будет окей.
да я хз, я думаю пока что


мне в принципе и моя статовытягивалка нрав, но оно ж костыль дичайший
источник