А где такое?

|
Содержание:
А где такое?
desar14 2022-07-02 17:21:08
omgszer 2022-07-02 17:19:44
классы тоже передаются в функцию по значению.
Их значение это референс.

Да, так правильнее говорить, согласен
С указателями было понятнее)

CoollllllllllllllllllllllllN 2022-07-02 17:23:45
omgszer 2022-07-02 17:05:42
Ну вот и неверный ответ. Всегда по значению, для передачи по ссылке надо написать ref

Ничеси

CoollllllllllllllllllllllllN 2022-07-02 17:24:06
omgszer 2022-07-02 17:05:42
Ну вот и неверный ответ. Всегда по значению, для передачи по ссылке надо написать ref

Ref, что-то слышал такое

toxic_piece_of_shit 2022-07-02 17:43:35
omgszer 2022-07-02 17:18:22
аргументы всегда передаются по значению.
Некоторые аргументы передаваемые в функцию могут быть референсом.
Т.к. референс передаётся по значению поменять ты его не можешь пока ты не передашь ссылку на референс

проще сказать, что при передаче ссылочного типа передается ссылка, которая сама по себе является value type

omgszer 2022-07-02 17:44:43
toxic_piece_of_shit 2022-07-02 17:43:35
проще сказать, что при передаче ссылочного типа передается ссылка, которая сама по себе является value type

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

Ну правда ж проще потому что так и есть

AleX 2022-07-02 18:09:47
dotnetruchat-1303665.jpg
подскажите, а как (если можно) использовать константу в классе MainMenuScreen, который реализует абстрактный класс Screen?
the_zazaeil 2022-07-02 18:10:03
desar14 2022-07-02 17:16:34
Подожди
Вот я передал в метод некий объект, внутри его поменял, после выполнения метода у меня уже измененные значения — это ж по ссылке

Класс передаётся по ссылке (на структуру, которая представляет этот класс).

Но ты можешь передать ссылку на ссылку на эту структуру. В С это будет void * *.

the_zazaeil 2022-07-02 18:10:21
В общем случае, можно передавать ссылку на ссылку на ссылку на ссылку… на ссылку.
desar14 2022-07-02 18:10:44
the_zazaeil 2022-07-02 18:10:21
В общем случае, можно передавать ссылку на ссылку на ссылку на ссылку… на ссылку.

Не стоит в это влазить, мы ещё слишком молодые

sharpenjoyer 2022-07-02 18:10:47
the_zazaeil 2022-07-02 18:10:03
Класс передаётся по ссылке (на структуру, которая представляет этот класс).

Но ты можешь передать ссылку на ссылку на эту структуру. В С это будет void * *.

Класс передаётся по значению!

sharpenjoyer 2022-07-02 18:11:08
в новую переменную которая копирует ссылку
desar14 2022-07-02 18:11:16
sharpenjoyer 2022-07-02 18:10:47
Класс передаётся по значению!

По значению своей ссылки

Keter_SCP 2022-07-02 18:11:18
AleX 2022-07-02 18:09:47
подскажите, а как (если можно) использовать константу в классе MainMenuScreen, который реализует абстрактный класс Screen?

Screen.indentOfScreenTitle

sharpenjoyer 2022-07-02 18:11:23
если изменишь значения по референсу этой переменной
sharpenjoyer 2022-07-02 18:11:26
изменишь объект
sharpenjoyer 2022-07-02 18:11:33
если сменишь значение этой переменной
the_zazaeil 2022-07-02 18:11:42
sharpenjoyer 2022-07-02 18:10:47
Класс передаётся по значению!

Я выше написал 🙂
«Значение» в данном случае — это четыре или восемь байт, которые представляют сдвиг относительно нуля в оперативной памяти (виртуальную память сейчас не берём в расчёт).

sharpenjoyer 2022-07-02 18:11:43
и потом сменишь по этому значению значения
sharpenjoyer 2022-07-02 18:11:44
то всё ок
the_zazaeil 2022-07-02 18:11:53
desar14 2022-07-02 18:10:44
Не стоит в это влазить, мы ещё слишком молодые

Стоит.

sharpenjoyer 2022-07-02 18:12:09
the_zazaeil 2022-07-02 18:11:42
Я выше написал 🙂
«Значение» в данном случае — это четыре или восемь байт, которые представляют сдвиг относительно нуля в оперативной памяти (виртуальную память сейчас не берём в расчёт).

ога!

the_zazaeil 2022-07-02 18:13:05
ref ничем не отличается. Кто говорит что это что-то другое — не знает о чем говорит.

Точно так же в итоге копируется значение ссылки (в случае ref class это будет ссылка на ссылку).

the_zazaeil 2022-07-02 18:13:22
Но процесс копирования 4 или 8 байт самой ссылки абсолютно одинаковый.
AleX 2022-07-02 18:13:41
Keter_SCP 2022-07-02 18:11:18
Screen.indentOfScreenTitle

🙏 ее паблик не обозначил!!!БОльшое Мерси.

Keter_SCP 2022-07-02 18:41:45
the_zazaeil 2022-07-02 18:13:05
ref ничем не отличается. Кто говорит что это что-то другое — не знает о чем говорит.

Точно так же в итоге копируется значение ссылки (в случае ref class это будет ссылка на ссылку).

нету там никакой ссылки на ссылку

the_zazaeil 2022-07-02 18:43:06
Keter_SCP 2022-07-02 18:41:45
нету там никакой ссылки на ссылку

я не знаю как это устроено конкретно в дотнете, в смысле детали имплементации не знаю. да это и не важно на самом деле.

Keter_SCP 2022-07-02 18:43:24
the_zazaeil 2022-07-02 18:43:06
я не знаю как это устроено конкретно в дотнете, в смысле детали имплементации не знаю. да это и не важно на самом деле.

аналогом в плюсах будет *&

the_zazaeil 2022-07-02 18:43:52
Keter_SCP 2022-07-02 18:43:24
аналогом в плюсах будет *&

в плюсы не могу, я по С ударяю )

Keter_SCP 2022-07-02 18:44:02
the_zazaeil 2022-07-02 18:43:52
в плюсы не могу, я по С ударяю )

ну там думаю тоже такое есть

the_zazaeil 2022-07-02 18:44:15
Keter_SCP 2022-07-02 18:44:02
ну там думаю тоже такое есть

ну это явно не просто void * *

Mikhail 2022-07-02 19:10:06
omgszer 2022-07-02 17:05:42
Ну вот и неверный ответ. Всегда по значению, для передачи по ссылке надо написать ref

А потом сидишь такой и тупишь. Какого *** оно значение тут изменило, если нигде ref/out нет. Реальный случай из жизни или когда забыл прописать .Clone(), а он там был не просто так 😒

omgszer 2022-07-02 19:10:53
Mikhail 2022-07-02 19:10:06
А потом сидишь такой и тупишь. Какого *** оно значение тут изменило, если нигде ref/out нет. Реальный случай из жизни или когда забыл прописать .Clone(), а он там был не просто так 😒

бери фшарп

omgszer 2022-07-02 19:11:03
там компилятор защищает от такой херни
Liminiens 2022-07-02 19:11:14
omgszer 2022-07-02 19:10:53
бери фшарп

все так

the_zazaeil 2022-07-02 19:11:44
omgszer 2022-07-02 19:10:53
бери фшарп

1000000%

the_zazaeil 2022-07-02 19:11:55
я вообще не понимаю зачем Сишарп нужен
Phanto_m 2022-07-02 19:11:58
desar14 2022-07-02 17:16:34
Подожди
Вот я передал в метод некий объект, внутри его поменял, после выполнения метода у меня уже измененные значения — это ж по ссылке

Ты передаешь копию ссылки, которая лежит в переменной, и по ссылке меняешь объект

Phanto_m 2022-07-02 19:12:08
ref передает ссылку на саму переменную или поле
the_zazaeil 2022-07-02 19:12:09
в сравнении с Эфшарпом он ничего дать не может толком
Phanto_m 2022-07-02 19:12:24
Если посмотришь на IL код, там есть отличие с реф и без
Phanto_m 2022-07-02 19:12:44
Mikhail 2022-07-02 19:10:06
А потом сидишь такой и тупишь. Какого *** оно значение тут изменило, если нигде ref/out нет. Реальный случай из жизни или когда забыл прописать .Clone(), а он там был не просто так 😒

По этому надо писать чистые функции

Phanto_m 2022-07-02 19:12:48
Или в имени описывать
Phanto_m 2022-07-02 19:12:59
Или сделать метод void (чтобы показать, что ты императивная мразь)
omgszer 2022-07-02 19:14:32
в фшарпе хорошо сделана мутабельность и передача по ссылке (разные виды передачи)
Т.е. то что иммутабельно — иммутабельно и вам компилятор по ебалу надаёт за попытки чот поменять.
Так же он заставит вас явно делать копии там, где в сишарпе компилятор делает неявно (и вы такие wtf, почему я мутирую, а оно не мутируется)
Phanto_m 2022-07-02 19:15:06
Keter_SCP 2022-07-02 18:41:45
нету там никакой ссылки на ссылку

Ну, ссылка на переменное/поле, в которой содержится ссылка

Phanto_m 2022-07-02 19:15:31
omgszer 2022-07-02 19:14:32
в фшарпе хорошо сделана мутабельность и передача по ссылке (разные виды передачи)
Т.е. то что иммутабельно — иммутабельно и вам компилятор по ебалу надаёт за попытки чот поменять.
Так же он заставит вас явно делать копии там, где в сишарпе компилятор делает неявно (и вы такие wtf, почему я мутирую, а оно не мутируется)

А где такое? Или ты про структуры? (Про неявное копирование)

omgszer 2022-07-02 19:15:41
Phanto_m 2022-07-02 19:15:31
А где такое? Или ты про структуры? (Про неявное копирование)

что где? дефенсив копии где?

Keter_SCP 2022-07-02 19:16:24
Phanto_m 2022-07-02 19:15:06
Ну, ссылка на переменное/поле, в которой содержится ссылка

речь шла именно о ссылке на ссылку ** в плюсах, но в шарпе ref это аналог *&, это если говорим о ссылочных типах

omgszer 2022-07-02 19:16:58
the_zazaeil 2022-07-02 18:11:42
Я выше написал 🙂
«Значение» в данном случае — это четыре или восемь байт, которые представляют сдвиг относительно нуля в оперативной памяти (виртуальную память сейчас не берём в расчёт).

нет, управляемый референс это не поинтер. Если бы это было так, нам не нужен был бы fixed

omgszer 2022-07-02 19:17:19
мне кажется спорящие выше всё же путают поинтеры и референсы
|