Используя другой небольшой хак можно сделать, что окно, во-первых, было поверх остальных окон, а во вторых, было не в фокусе и клики проходили бы сквозь него.
Очевидно, что разбивание было показано исключительно в познавательных целях. Разве что в будущем эти сервисы будут весьма толстыми, и на каждом будет сидеть своя команда, но это дискутируемо.
Да и пример reader.GetString(0) не совсем корректен, ведь что если у нас там INT NULLABLE? Есть метод GetFieldValue<T>(и даже async-вариант), но я не проверял, умеет ли он в Nullable<T>.
К тому же, reader.GetString возвращает string, а DBNull.Value — чтож, DbNull, так что даже этот вариант не сработает — эти типы нельзя между собой сравнивать.
и при этом равно 0 описания того, зачем это всё нужно. вроде как статья для непрошаренных, но как я был непрошаренным, так и остался, только на красивые слова посмотрел.
В этом коде класс C не должен откомпилироваться, потому что у него нет конструктора с параметрами int x, int y, а вот класс B откомпилируется без ошибок.
В C# класс С тоже не откомпилируется, он тоже обязан вызвать базовый конструктор через : base(..).
Возможен ещё один вариант: если в наследнике не перекрыт виртуальный конструктор предка, компилятор автоматически перекрывает его
Я не вижу ни одного плюса такой непонятной реализации.
А вот если у нас будут метаклассы, то код с неправильными параметрами просто не откомпилируется.
Все, что от C# требуется, это добавить Method<T>() where T : class. new (int, string), но мелкомягкие уже что-то вроде "сложно и не нужно" писали на этот счет.
Ну и стоит заметить что рефлексия это лишь инструмент для обучения, если нужно именно быстро и динамически создавать строго-типизированные классы, можно воспользоваться скомпилированными ExpressionTrees или даже прямой IL генерацией.
О чем еще?
А смысл тогда Core поддерживать, если WPF все еще не кроссплатформенный.
Я бы тоже хотел увидеть пример ситуации, когда это реально нужно.
Используя другой небольшой хак можно сделать, что окно, во-первых, было поверх остальных окон, а во вторых, было не в фокусе и клики проходили бы сквозь него.
Мне чет не нравится как это выглядит (я сторонник "лишних" строк).
Очевидно, что разбивание было показано исключительно в познавательных целях. Разве что в будущем эти сервисы будут весьма толстыми, и на каждом будет сидеть своя команда, но это дискутируемо.
Но где написано, что это противоречит? :)
норм, vk api опрашивать — самое оно, его как мейл купил, так там через день 500 стало падать
Не плюйтесь на базовую обертку работы с БД.
Примитивных типов не так много, всегда можно сделать свой generic extension, который будет работать именно так, как вам надо.
Да и пример
reader.GetString(0)не совсем корректен, ведь что если у нас тамINT NULLABLE? Есть методGetFieldValue<T>(и даже async-вариант), но я не проверял, умеет ли он вNullable<T>.К тому же,
reader.GetStringвозвращаетstring, аDBNull.Value— чтож,DbNull, так что даже этот вариант не сработает — эти типы нельзя между собой сравнивать.ни один новичок не знает, как работает дотнет под капотом (когда узнает — становится мидлом :) ), с их стороны это вполне разумно и логично.
Стоит отметить, что всё сильно меняется, если нужно использовать IO и асинхронность. Вот уже вторая часть статьи, а ни одного
asyncа я не увидел.ну а шош поделать то
и при этом равно 0 описания того, зачем это всё нужно. вроде как статья для непрошаренных, но как я был непрошаренным, так и остался, только на красивые слова посмотрел.
Отлично написано, очень много полезной информации, спасибо автор!
я конечно не претендую на звание про, но они ищут кодеров которые пишут нечитаемый говнокод или же все таки простую, понятную и сложную архитектуру?)
я просто использую
JSON.ToObject<T>(data), версия 2.2.4, пакет вроде тот же.странно, у меня fastJSON работает где то в 20 раз быстрее Newtonsoft (на десериализацию). но спасибо за тесты.
А теперь сравните с fastJSON, пожалуйста.
В C# класс С тоже не откомпилируется, он тоже обязан вызвать базовый конструктор через
: base(..).Я не вижу ни одного плюса такой непонятной реализации.
Все, что от C# требуется, это добавить
Method<T>() where T : class. new (int, string), но мелкомягкие уже что-то вроде "сложно и не нужно" писали на этот счет.Ну и стоит заметить что рефлексия это лишь инструмент для обучения, если нужно именно быстро и динамически создавать строго-типизированные классы, можно воспользоваться скомпилированными ExpressionTrees или даже прямой IL генерацией.