- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
using System;
namespace ConsoleApplication13
{
class Program
{
private static void Main(string[] args)
{
var s = new MyStruct(1);
Console.WriteLine(s);
s.Change(2);
Console.WriteLine(s);
((IChangable)s).Change(3);
Console.WriteLine(s);
var o = (IChangable) s;
((MyStruct) o).Change(4);
Console.WriteLine(o);
}
interface IChangable
{
void Change(int x);
}
struct MyStruct:IChangable
{
private int _value;
public MyStruct(int x)
{
_value = x;
}
public void Change(int x)
{
_value = x;
}
public override string ToString()
{
return "Value is " +_value;
}
}
}
}
kegdan 28.04.2016 00:23 # 0
Ничего в замен не получай
kerman 28.04.2016 00:45 # 0
inkanus-gray 28.04.2016 00:50 # +5
Не удержался, запустил. Комп распидорасило, пишу с утюга.
Ставлю плюс.
kerman 28.04.2016 00:55 # +1
На чём писать, товарисчи???
1024-- 28.04.2016 01:18 # +1
3_14dar 28.04.2016 01:21 # +5
'5'+3 = 53
'5'-3 = 2
1024-- 28.04.2016 01:26 # 0
3_14dar 28.04.2016 05:09 # +4
1024-- 28.04.2016 08:37 # +2
Сколько останется от 15*15, если оставить только используемое в здравом уме?
А тут в C# при касте к родителю создаётся копия объекта, которая ведёт себя как исходный объект, но никак с ним не связана. И то, не всегда (см. комментарий Кегдана ниже).
1024-- 28.04.2016 08:38 # +3
3_14dar 28.04.2016 20:11 # +1
А "неиспользуемое в здаром уме" уже не надо читать?
>А тут в C# при касте к родителю создаётся копия объекта, которая ведёт себя как исходный объект, но никак с ним не связана. И то, не всегда (см. комментарий Кегдана ниже).
До рнр все-таки еще далеко.
1024-- 28.04.2016 20:32 # 0
Можно не читать. Если оно работает - пусть работает. Если не работает, легче заново переписать, т.к. явно умножение объектов в подобном коде - самое безобидное.
bagrinho 20.01.2021 22:31 # 0
1024-- 22.01.2021 22:43 # 0
guest6 22.01.2021 22:44 # 0
guest6 22.01.2021 22:44 # 0
1024-- 22.01.2021 23:12 # 0
guest6 22.01.2021 23:34 # 0
1024-- 23.01.2021 23:06 # 0
guest6 23.01.2021 23:08 # 0
1024-- 23.01.2021 23:15 # 0
guest6 23.01.2021 23:20 # 0
1024-- 25.01.2021 09:59 # 0
TOPT 25.01.2021 10:03 # 0
guest6 25.01.2021 18:17 # 0
CBuHOKYP 24.01.2021 00:39 # 0
Залпом. Предварительно сделать вдох фтороводорода.
guest6 23.01.2021 00:53 # 0
> дорого и вредно
defecate-plusplus 28.04.2016 09:45 # +2
ну ты понятия не подменяй
у тебя есть дочерний объект
ты хочешь использовать этот объект как родительский - ты берешь и кастишь указатели или ссылки (возможно даже неявно) и используешь как родительский, а результатом такого каста является новый объект типа "указатель" или "ссылка"
http://ideone.com/X6zjCk
а то, что ты написал - сделай ка мне из объекта d новый объект родительского класса, т.к. хочешь в ответ получить именно объект другого класса, и обычно такая операция не определена, на что тебе и указывает компилятор
и да, ты её даже можешь определить в дочернем классе, ну или при определенной степени упоротости - в родительском, и тогда она тоже заработает и будет делать то, что написано
kegdan 28.04.2016 09:53 # 0
Бредор какой-то
roman-kashitsyn 28.04.2016 10:51 # +2
Я может чего не понял, но разве конструктор копирования не подойдёт? Просто slicing будет.
> указывает компилятор
А где посмотреть, что сказал компилятор 1024--?
Мой компилятор счастлив. Да и почему бы нет?
defecate-plusplus 28.04.2016 11:07 # 0
Soul_re@ver 28.04.2016 11:27 # +2
gost 28.04.2016 16:34 # 0
CBuHOKYP 30.01.2021 00:45 # 0
guest6 10.09.2023 16:13 # 0
Там Petuh наследуется от BasePetuh.
Далее, жертве дают указатель на Petuh, и говорят скастить его в указатель на войд.
Далее, жертве дают скащенный в войд указатель, и говорят скастиь его в указаель на BasePetuh.
В этом месте происходит хуесосинг, потому что компилятор не знает, что указатель указывает на Petuh а не на BasePetuh, и смещение у членов там другое.
guest6 10.09.2023 16:16 # 0
guest6 10.09.2023 16:20 # 0
В общем цимес в том, что если в сгинатуре явно указан указатель на BasePetuh, то умненький компилятор правильно превращает в него Petuh. А если void, то нужно тявно кастить;
guest6 10.09.2023 19:41 # 0
Каждый компитушочек должен релизовывать метод
Задача компитушочка покласть в ppv указатель на нужный интерфейс.
Клиент потом кастанёт ppv в нужный интерфейс. Но клиент в другом бинаре.
Теперь представь себе, что у тебя класс занаследован от Petuh1, Petuh2 и Petuh3.
Ты присваиваешь ppv this.
Клиент кастит ppv в Petuh3.
Что случится? Как клиент найдет нужные члены?
Именно потому хоть в сишке и можно присвоить войду что угодно, всё равно нужно явно апкастить.
Пиздец, мы как всегда говорим про технологию, которая устарела, когда некоторые из говнокодеров сидели у папы в яйцах
kerman 28.04.2016 01:42 # 0
https://www.destroyallsoftware.com/talks/wat
1024-- 28.04.2016 01:55 # 0
Сравнили зачем-то применение LSP с проверкой языка на прочность.
В примере Кегдана разумные действия приводят к странным результатам. Здесь же странные действия приводят к странным результатам.
В JS можно выстрелить себе в ногу только холостым патроном (NaN) из незаряженного ружья (undefined), сев на коня задом наперёд.
CBuHOKYP 29.01.2021 19:54 # 0
Sfabrikan 28.04.2016 06:00 # +1
Vasiliy 28.04.2016 09:56 # 0
kegdan 28.04.2016 10:13 # +7
+ это обычный плюс, такой еще твои мамка и папка юзали в школе когда маленькими были, ага
2 + 3
5
Просто же. да? давай еще
% - это поделить. Что значит почему? Ты долбоеб? Ты доблоеб?! % - лучшее поделить чем /!! Не спорь о чем не знаешь
2 % 4
2
Просто как дваждыдва наоборот
% 4
0.25
Видал!. Видал! С разным числом аргументов функция работает по разному! это тебе не сишка-хуишка! Тут серьезные технологии!
% 1 2 3 4
1 0.5 0.333333 0.25
Даже форыч вшит в подкорку!
2 % 1 2 3 4
2 1 0.666667 0.5
2 4 3 2 % 1 2 3 4
2 2 1 0.5
И так можно. смотри как клево! охуительно!
А теперь смотри - что такое среднее арифметическое вектора? это... ну...ну... блеать, чему тебя учили в школе? Это сумма деленная на количество, правильно? Ай, все равно долбоеб!
записываем
+/ - сумма да, да именно суда сбежало поделить
+/ 1 2 3 4
10
# - шарп длинннннннннна
# 1 2 3 4
4
а поделить мы знаем
присвоение как в паскале. вывернутом кишками на солнце
avg =: хуе-мое
А теперь пишем вместе
среднее арифметическое (avg) это (=:) сумма(+/) деленная(%) на количество(#)
avg =: +/%#
avg =: +/%#
avg 1 2 3 4
2.5
а отклонение (deviation)это(=:) сам элемент (]) минус (-) сумма(+/) деленная(%) на количество(#)
deviation =: ]-+/%#
deviation 1 2 3 4
_1.5 _0.5 0.5 1.5
А еще ] можно не писать, если она первая слева
deviation =: -+/%#
deviation 1 2 3 4
_1.5 _0.5 0.5 1.5
Вот это язык. вот это возможности!
gost 28.04.2016 10:35 # +1
kegdan 28.04.2016 10:37 # +11
3_14dar 28.04.2016 20:12 # +1
kegdan 28.04.2016 20:13 # 0
3_14dar 28.04.2016 20:28 # 0
kegdan 28.04.2016 20:29 # 0
>> "J для долбоебов. Издание 2ое, дополненное пиздюлями"
3_14dar 28.04.2016 22:35 # 0
kegdan 28.04.2016 22:36 # +3
inkanus-gray 28.04.2016 23:02 # +8
kegdan 28.04.2016 23:31 # +6
Мы на таком не пишем - разработчик из Юбисофт
Эта книга с хуем! - Никита Джигурда
Хуета какая-то - журнал "Игромания"
Москоляку на гиляку! - какой-то хохол
guest 29.04.2016 16:36 # +2
блядь, это ты расскажи тем, кто делал Skype или MikroTik.
Шовинист хуив
inkanus-gray 29.04.2016 16:42 # +3
MictoTik — какой-то производитель маршрутизаторов, известный в Буркина-Фасо.
При чём тут они?
guest 29.04.2016 16:47 # +3
Один из первых голосовых мессенджеров, бывший долгое время стандартом де-факто для звонков по Интернету, купленных Microsoft.
>>MictoTik — какой-то производитель маршрутизаторов,
Маршрутизаторов и собственной операционки к ним, известный каждому телекоммуникационщику по всему миру (в гугл "mikrotik vs cisco"). Ты просто не в теме.
>>при чём
Skype: " in cooperation with Ahti Heinla, Priit Kasesalu, and Jaan Tallinn, Estonians who developed the backend that was also used in the music-sharing application Kazaa."
MikroTik: Mikrotīkls SIA, known internationally as MikroTik, is a Latvian manufacturer of computer networking equipment
inkanus-gray 29.04.2016 16:53 # +6
Про Литву надо ещё что-нибудь вспомнить. Помню только что во времена проклятой советской оккупации в Литве собирали БК-0010.
Xom94ok 29.04.2016 18:14 # 0
> Ты просто не в теме.
А ты в теме? Расскажи, пожалуйста, оно и правда "воткнул-настроил-забыл" или нужно дрочить много мануалов, чтобы заработали хотя бы базовые возможности?
defecate-plusplus 29.04.2016 18:15 # +3
воткнул, настроил, забыл
gost 29.04.2016 19:21 # +3
Кажется, я перепутал...
guest6 10.09.2023 20:59 # 0
Как минимум сразу советую:
1. Отключить WebFIG и Winbox сервисы
2. Включить ssh по ключу
3. Открыть порт на ssh только со своего IP (ну или только из домашней локалки в случае домашнего роутера)
4. Явно разрешить input established, related, icmp ping и ntp плюс доступ из локалки. Остальное input DROP
5. Тоже самое с forward.
6. Сделать бекап конфигурации и схронить в укромном месте
7. Настроить NTP клиента
guest6 10.09.2023 21:59 # 0
guest6 11.09.2023 00:42 # 0
ropuJIJIa 11.09.2023 01:48 # 0
defecate-plusplus 29.04.2016 16:47 # +2
TarasB 28.04.2016 11:43 # 0
2 4 3 2 % 2 3 4
?
kegdan 28.04.2016 11:53 # 0
TarasB 28.04.2016 12:09 # 0
делить 0 элементов на 4 элемента можно,
делить 1 элемент на 4 элемента можно,
делить 4 элемента на 4 элемента можно,
делить 2 элемента на 4 элемента нельзя?
kegdan 28.04.2016 12:19 # 0
1 элемент расценивается как скаляр и производится операция скаляр к вектору, что имеет место быть
4 расценивается как вектор, а для векторов равной длинный определённо почленное применение операций.
А 2 это вектор отличной длины, увы. Можно растянуть его с помощью 4&$
4&$ 1 2
1 2 1 2
TarasB 28.04.2016 12:56 # +1
Сколько будет
5 &$ 1 2 3
?
kegdan 28.04.2016 13:02 # 0
5 &$ 1 2 3
1 2 3 1 2
kegdan 28.04.2016 13:25 # 0
1 2 3 4 1
2 3 4 1 2
3 4 1 2 3
4 1 2 3 4
1 2 3 4 1
2 3 4 1 2
3 4 1 2 3
4 1 2 3 4
1 2 3 4 1
2 3 4 1 2
3 4 1 2 3
4 1 2 3 4
TarasB 28.04.2016 12:10 # 0
А почему не элемент минус сумма, и всё это вместе делённое на количество?
kegdan 28.04.2016 12:24 # 0
deviation =: ]-+/%#
эквивалентно
deviation =: ]-(+/%#)
3_dar 28.04.2016 23:01 # +3
kerman 28.04.2016 00:57 # +1
inkanus-gray 28.04.2016 01:11 # 0
Каст в интерфейс ((IChangable)s).Change(3):
Такой же box вызывается перед WriteLine.
И, наконец, самое страшное — последний фрагмент с кастами туда-сюда:
Я вообще не знаю .NET. Что делают эти box/unbox и что из этого вытекает?
kerman 28.04.2016 01:41 # 0
Боксинг - это когда value type кастится в object. При этом создаётся копия в куче и с ней уже проводятся дальнейшие операции. При анбоксе тоже создаётся копия, но уже на стеке. Анбокс - это когда из object достаётся value type.
kegdan 28.04.2016 06:17 # +4
Структура в шарпе всегда хранится на стеке (даже когда создается через new, да), а интерфейсы стандартных функций требуют объекты, которые могут лежать только в куче. Поэтому в шарпе существуют неявные операции упаковки в обьект и распоковки из него.
А теперь по коду.
Console.WriteLine(); не знает как работать с твоей собственной структурой и будет требовать обьект, что вызовет упаковку в обьект с копирование в кучу. Если написать
То никакой упаковки не будет. Будьте внимательны с этим, ребята, ибо код
Упакует s в пять разных (!) обьектов, и передаст их на вход String.Concat или как-то так
Приведение к интерфейсу всегда создает обьект в куче. по сути(IChangable)s создает совершенно независимый от s обьект в куче, копирует его поля, выполняет Change(3), а потом он сразу попадает под интерес сборщика мусора, потому что на него нет ссылок.
Тут мы упаковывает s в обьект о, который хранится в куче, а затем с помощью
(MyStruct) o
распаковываем его. Суть в том, что распаковка без копирования в шарпе абсолютно бесполезна. Мы создаем обьект на стеке, на которы у нас нет ссылки, и изменяет его с помощью .Change(4). На запакованный в o обьект это никак не влияет
Кстати
отработает нормально и выведет в консоль 4
Цитата Рихтера
"Некоторые главы этой книги я показал разработчикам . Познакомившись с примерами
программ (например, из этого раздела), они сказали, что решили держаться подаль-
ше от значимых типов . Должен сказать, что эти незначительные нюансы значимых
типов стоили мне многодневной отладки, поэтому я и описываю их в этой книге ."
bormand 28.04.2016 07:25 # 0
Даже когда лежит как поле нормального объекта? :3
kegdan 28.04.2016 09:36 # +2
guest6 10.09.2023 16:17 # 0
Это перевод термина value type?
guest6 10.09.2023 21:03 # 0
Боксинг это перемешение питуха в кучу и работа с ним по референсу.
Анбкосинг это обртная операция
Steve_Brown 28.04.2016 12:11 # 0
http://ideone.com/4sMlMx
guest 28.04.2016 23:54 # 0
guest6 10.09.2023 16:17 # 0
guest6 10.09.2023 16:17 # 0
guest 29.04.2016 09:17 # 0
Console.WriteLine(s);
s.Change(2);
Console.WriteLine(s);
IChangable s1 = (IChangable)s;
s1.Change(3);
Console.WriteLine(s1);
var o = (MyStruct)s;
o.Change(4);
Console.WriteLine(o);
guest 29.04.2016 09:22 # 0
guest6 10.09.2023 16:19 # 0
Вот именно по-этому я за то, что бы учить студентов няшной.
zhigolo 23.01.2021 18:47 # 0