powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IDisposable и структуры
25 сообщений из 109, страница 2 из 5
IDisposable и структуры
    #40025832
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
вопросы про наследование интерфейса структурой многих приводит в недоумение

Все недоумения от интерфейсов, как я в другом месте уже говорил, просто результат неудачного термина, потому что "наследования" интерфейсов не существует, есть только "реализация". Это все приплыло, по-моему, из того языка-мутанта который с двумя крестами, где вообще не было полноценного синтаксиса для интерфейсов.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025834
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Это спека

Какая там спека на GetHashCode. Единственная его спека это то, что для одного и того же экземпляра оно должно возвращать всегда одно и то же значение.

Даже если ты напишешь где-нибудь:
Код: c#
1.
public override int GetHashCode() => 0;

то это совсем не хорошо, но небо на землю не упадет, и все, как ни странно, будет продолжать работать :))

У меня была умора во второй половине двухтысячных. Одни клоуны где-то прочитали, что, типа хранить пароли в plain text это плохо, над хранить хеши. И они тогда стали в БД в поле int сохранять password.GetHashCode() И все, причем, долгое время нормально работало. Но в один прекрасный день: "ахтунг-ахтунг, никто не может на сайт залогиниться" Оказалось, что они ночью перевезли эту веб-аппликуху на 64 бита. А GetHashCode() для строк на 32-битном и 64-битном фреймворках считаются по-разному.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025875
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
вопросы про наследование интерфейса структурой многих приводит в недоумение

Все недоумения от интерфейсов, как я в другом месте уже говорил, просто результат неудачного термина, потому что "наследования" интерфейсов не существует, есть только "реализация". Это все приплыло, по-моему, из того языка-мутанта который с двумя крестами, где вообще не было полноценного синтаксиса для интерфейсов.


Недоумение исключительно по не знанию и неграмотности. Наследование, так как это явно прописывается в определении типа.

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

fkthat
Единственная его спека это то, что для одного и того же экземпляра оно должно возвращать всегда одно и то же значение.


Ну вот касательно структур -- как раз таки нет.

fkthat
У меня была умора во второй половине двухтысячных. Одни клоуны где-то прочитали, что, типа хранить пароли в plain text это плохо, над хранить хеши. И они тогда стали в БД в поле int сохранять password.GetHashCode() И все, причем, долгое время нормально работало. Но в один прекрасный день: "ахтунг-ахтунг, никто не может на сайт залогиниться" Оказалось, что они ночью перевезли эту веб-аппликуху на 64 бита. А GetHashCode() для строк на 32-битном и 64-битном фреймворках считаются по-разному.


Так об этом тоже явно прописано и в книжках писали 50 тыщ раз.

Я же говорю. Долбанные практики, которые ничему учиться не хотят, всё методом тыка, StackOverflow-кодинг, потом делают круглые глаза и удивляются: а чтоооо это такоеее? А пооочему оооошибко?

Матчасть нужно учить.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025885
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Ну вот касательно структур -- как раз таки нет.

Есть только дефолтная реализация для ValueType которая для копии структуры всегда вернет то же значение что у оригинала, что вполне логично и ожидаемо. Но никто тебе не запрещает перегрузить её своей, пока ты следуешь правилу "одинаковые объекты -> одинаковый хешкод" (наоборот совершенно необязательно). Можешь тот же 0 всегда возвращать :))

hVostt
Так об этом тоже явно прописано и в книжках писали 50 тыщ раз.

Ну я, например, об этом не знал. Да и не узнал бы, если бы не тот случай - мне достаточно знания того, что GetHashCode вообще никакого отношения к криптографическому хешу не имеет :))
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025912
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
StackOverflow-кодинг

Это все же лучше, чем вообще свои собственные выдумки :))
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025916
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Это все же лучше, чем вообще свои собственные выдумки :))
смотря откуда брать код - из ответов или из вопросов
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025923
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Наследование, так как это явно прописывается в определении типа.

Наследование нафиг. Я бы его вообще запретил

Рихтер вот что пишет:
CLR via C# 4th EditionFirst, when defining a new type, compilers should make the class sealed by default so that the class
cannot be used as a base class. Instead, many compilers, including C#, default to unsealed classes and
allow the programmer to explicitly mark a class as sealed by using the sealed keyword. Obviously, it is
too late now, but I think that today’s compilers have chosen the wrong default and it would be nice if
this could change with future compilers.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025965
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Так об этом тоже явно прописано и в книжках писали 50 тыщ раз.

Ну я, например, об этом не знал. Да и не узнал бы, если бы не тот случай - мне достаточно знания того, что GetHashCode вообще никакого отношения к криптографическому хешу не имеет :))


Ну как, если будешь структуру в качестве ключа словаря использовать, эти знания тебе понадобятся.
Это, кстати, давно известная оптимизация для комплексного ключа в памяти.

Мне это много когда пригодилось, другое дело если программист дальше прикладного уровня не ходит, то и не пригодится...

fkthat
hVostt
StackOverflow-кодинг

Это все же лучше, чем вообще свои собственные выдумки :))


А там сам бог ответы пишет? Те же выдумки, только чужие.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025969
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Наследование, так как это явно прописывается в определении типа.

Наследование нафиг. Я бы его вообще запретил

Рихтер вот что пишет:
CLR via C# 4th EditionFirst, when defining a new type, compilers should make the class sealed by default so that the class
cannot be used as a base class. Instead, many compilers, including C#, default to unsealed classes and
allow the programmer to explicitly mark a class as sealed by using the sealed keyword. Obviously, it is
too late now, but I think that today’s compilers have chosen the wrong default and it would be nice if
this could change with future compilers.


Ну с наследованием такая тема. Если ты имеешь отношение к проектированию архитектуры, написанию платформы и core проекта, то наследование это очень крутая штука и мощнейший инструмент, который даёт колоссальный профит.

В неумелых руках прикладника и джуна, наследование это конечно боль и негодование "нахера оно нужно!??"
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40025971
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Рихтер вот что пишет:


Хотя с Рихтером я когда-то был согласен, типа делать sealed по умолчанию.
Сейчас -- нет. Не согласен.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026030
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
В неумелых руках

Вреда от наследования в рукожопах на порядок больше, чем пользы от него в руках умелых. И, правильно, на самом деле
hVostt
нахера оно нужно
единственное нормальное его применение, что в голову приходит это паттерн "фабричный/шаблонный метод" - без них вполне можно обойтись просто инжекцией нужной абстракции (по сути заменяя наследование композицией по заветам GoF).

Особо люто выбешивает создание в проекте класса типа WebApiMvcWebFormsBaseController и напихание туда гималайской горы всякого гамна типа "GetCurrentUserName", "IsCurrentUserVasja", "ValidateUserSnilsInnOgrnPhoneAndEmail" и т.п. Или, например, такой чудесный класс в модели EF, типа
Код: c#
1.
2.
3.
4.
public class EntityWithId<T>
{
   public T Id { get;set; }
}

Бесит, аж кушать не могу...
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026032
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
создание в проекте класса типа WebApiMvcWebFormsBaseController

Но самая жесть жести при этом когда какому-нибудь дровосеку сервис ILoveThisService понадобился аж в целых двух контроллерах и он, помня о бестипрактисе ДИ добавляет его в конструктор этого чудища архитектуры. И похрен то, что в остальных полюдюжине дюжин контроллеров этот сервис никому начлен не вперся.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026051
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
В неумелых руках

Вреда от наследования в рукожопах на порядок больше, чем пользы от него в руках умелых. И, правильно, на самом деле


Да нет там вреда, прикладники в наследование даже не лезут.
Слишком сложно.

fkthat
единственное нормальное его применение, что в голову приходит это паттерн "фабричный/шаблонный метод" - без них вполне можно обойтись просто инжекцией нужной абстракции (по сути заменяя наследование композицией по заветам GoF).


Не буду комментировать, применений конечно на пару порядков больше, но это очевидно для опытных разработчиков :)


fkthat
Особо люто выбешивает создание в проекте класса типа WebApiMvcWebFormsBaseController и напихание туда гималайской горы всякого гамна типа "GetCurrentUserName", "IsCurrentUserVasja", "ValidateUserSnilsInnOgrnPhoneAndEmail" и т.п. Или, например, такой чудесный класс в модели EF, типа
Код: c#
1.
2.
3.
4.
public class EntityWithId<T>
{
   public T Id { get;set; }
}


Бесит, аж кушать не могу...


А что не так? Очень часто встречающееся решение (вариации), значит хорошо работает.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026053
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
fkthat
создание в проекте класса типа WebApiMvcWebFormsBaseController

Но самая жесть жести при этом когда какому-нибудь дровосеку сервис ILoveThisService понадобился аж в целых двух контроллерах и он, помня о бестипрактисе ДИ добавляет его в конструктор этого чудища архитектуры. И похрен то, что в остальных полюдюжине дюжин контроллеров этот сервис никому начлен не вперся.


Если в двух контроллерах используется этот сервис, почему его нельзя добавить в конструктор этих контроллеров? Где затык? )
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026059
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
А что не так?

Уже хотя бы то, что это усложнение без всякой пользы. Когда ума нет что-то действительно полезное сделать, то начинается вот такое изобретательство всяких бессмысленных прослоек, расширений и базовых классов. Я когда-то видел проект, где какие-то долбоящеры написали больше полусотни своих методов-расширений к классам string и object. Хочешь верь, хочешь нет, но там даже был метод
Код: c#
1.
2.
3.
4.
public static bool IsNull(this object obj)
{
    return obj == null;
}

И все эти BaseEntityWithId из той же цыганской ярмарки.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026061
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Где затык? )

Так это не ко мне вопрос, а к творцам таких шедевров. Наверное, типа, целых две строчки кода повторяются целых два раза - надо срочно решение этому искать, а то еще, не ровен час вдруг в третьем месте потом их придется повторить
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026077
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Уже хотя бы то, что это усложнение без всякой пользы. Когда ума нет что-то действительно полезное сделать,


Наоборот упрощение. Если у тебя +100500 сущностей и у всех есть поле Id, то разумно сделать базовый класс и не дублировать одно и то же.

Польза есть и очень большая.

fkthat
Когда ума нет что-то действительно полезное сделать, то начинается вот такое изобретательство всяких бессмысленных прослоек, расширений и базовых классов. Я когда-то видел проект, где какие-то долбоящеры написали больше полусотни своих методов-расширений к классам string и object. Хочешь верь, хочешь нет, но там даже был метод
Код: c#
1.
2.
3.
4.
public static bool IsNull(this object obj)
{
    return obj == null;
}



Ну именно это конечно бессмысленно. Но большиство расширений для того же string -- полезны. А всё потому, что изначально многие методы не должны быть экземплярными, из-за них много NRE ошибок происходит.

fkthat
И все эти BaseEntityWithId из той же цыганской ярмарки.


Похоже тут пахнет неприкрытой вкусовщиной )
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026078
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Где затык? )

Так это не ко мне вопрос, а к творцам таких шедевров. Наверное, типа, целых две строчки кода повторяются целых два раза - надо срочно решение этому искать, а то еще, не ровен час вдруг в третьем месте потом их придется повторить


Собственно одна из задач наследования -- борьба с избыточностью.
Главное, без фанатизма.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026103
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Собственно одна из задач наследования -- борьба с избыточностью.

Из всех мыслимых способов переиспользования кода наследование это самый кривой и ущербный. Да и вот контрпример: квадрат это частный случай прямоугольника (те в терминах ОО его наследник), но для прямоугольника тебе надо хранить и ширину и высоту отдельно, а для квадрата они всегда одинаковые, поэтому хочешь-не хочешь, но придется наоборот делать избыточность.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026117
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Собственно одна из задач наследования -- борьба с избыточностью.

Из всех мыслимых способов переиспользования кода наследование это самый кривой и ущербный. Да и вот контрпример: квадрат это частный случай прямоугольника (те в терминах ОО его наследник), но для прямоугольника тебе надо хранить и ширину и высоту отдельно, а для квадрата они всегда одинаковые, поэтому хочешь-не хочешь, но придется наоборот делать избыточность.


Довольно нелепые домыслы. И довольно неуместный пример. В терминах ОО квадрат не наследник прямоугольника, квадрат и есть прямоугольник, у которого одинаковая длина сторон. Где, собственно, ты вообще видел в UI объект типа Square? Rectangle -- пожалуйста.

Короче, уверен у тебя наверняка есть печальный травматический опыт, но к объективной реальности это имеет мало отношения.

Порезался бумагой -- бумага злющее зло, запретить, сжечь!
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026141
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
квадрат и есть прямоугольник,

Чистое наследование. Любой кот есть животное, любая вилка есть столовый прибор, а любой квадрат есть прямоугольник.

hVostt
Где, собственно, ты вообще видел в UI объект типа Square

Я привел просто как пример усиления инвариантов в подклассе. А усиление инварианта уже означает, что у тебя код из базового класса может быть некорректным в производном.

Кстати, насчет котов и животных очень показательна в какое гамно выстраивание всяких иеархий наследований может завести. Таксономия в биологии зародилась еще в начале 19 века, и все поначалу было хорошо, красивая иеархия и т.п. но потом начинают появлятся всякие чупакабры и прочие грибы-кенгуры, которых либо вообще хрен его знает куда впихнуть, либо впихивать сразу в дюжину мест. Вот та же самая херь и с наследованием. Понастроил себе классов, сидишь и любуешься как художник на свою картину, а тут раз, и появляется какая-то хрень, которая тебе все ломает куда ты её ни впихивай.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026166
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
квадрат и есть прямоугольник,

Чистое наследование. Любой кот есть животное, любая вилка есть столовый прибор, а любой квадрат есть прямоугольник.


Нет, если ты так искренне считаешь, значит наследование не понимаешь в принципе.

Путать таксономию с наследованием -- это заблуждение древних первопроходцев, можно найти массу таких примеров в пожелтевших книжках по программированию.

fkthat
Я привел просто как пример усиления инвариантов в подклассе. А усиление инварианта уже означает, что у тебя код из базового класса может быть некорректным в производном.


Это максимально далёкий от наследования в ООП пример.
Что общего у вороны и письменного стола?

fkthat
Кстати, насчет котов и животных очень показательна в какое гамно выстраивание всяких иеархий наследований может завести. Таксономия в биологии зародилась еще в начале 19 века, и все поначалу было хорошо, красивая иеархия и т.п. но потом начинают появлятся всякие чупакабры и прочие грибы-кенгуры, которых либо вообще хрен его знает куда впихнуть, либо впихивать сразу в дюжину мест. Вот та же самая херь и с наследованием. Понастроил себе классов, сидишь и любуешься как художник на свою картину, а тут раз, и появляется какая-то хрень, которая тебе все ломает куда ты её ни впихивай.


Отражать объекты реального мира в иерархии наследования классов -- одно из величайших заблуждений, из-за которого потом столько нытья и соплей в интернетах, дескать ООП не работает :)

Для примеров нужно брать программные задачи, а не коты, собаки, круги и прочие глупости.

Насчёт "ломает". Это либо архитектор не опытный, или не далёкий. Либо изначальные теории не подтвердились на практике. Именно поэтому появляются новые решения, новые библиотеки и ПО.
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026168
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

Давай лучше реальные примеры рассматривать. Где плохо?
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026171
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Где плохо?

В том же твоем любимом Stream

Но, конечно, ты сейчас скажешь, что это просто из-за того, что его рукожопы делали
...
Рейтинг: 0 / 0
IDisposable и структуры
    #40026174
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Что общего у вороны и письменного стола?

Если мы, например, делаем специальный склад для хранения дохлых ворон и письменных столов, то в контексте этого склада у них может быть очень много общего.
...
Рейтинг: 0 / 0
25 сообщений из 109, страница 2 из 5
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IDisposable и структуры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]