Информация об изменениях

Сообщение Re[11]: ref local vs null от 29.05.2019 20:11

Изменено 29.05.2019 20:31 alexzzzz

Re[11]: ref local vs null
Здравствуйте, vdimas, Вы писали:

A>>Максимум что можно сделать с самой ссылкой, перенаправить её в новое место, явно указав, куда именно;

V>Также с указателями, заметь.
V>В С++ с ссылками так поступать нельзя.

Потому что текущий синтаксис не позволяет отличить переназначение ссылки от присваивания. Есть более концептуальные причины?

A>>а не как с указателями, где можно прибавить к адресу левое число — авось куда-нибудь да попадём.

V>Да без проблем:
V>https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.unsafe.add?view=dotnet-plat-ext-2.1#System_Runtime_CompilerServices_Unsafe_Add__1___0__System_IntPtr_
V>...

Почему оно не на C#?

A>>Ссылка же указывает на какую-то конкретную ячейку памяти, в которой гарантированно хранится что-то полезное.

V>Угу, типа сабжа — ссылки на null.

При большом желании можно и ... строку сделать отрицательной длины. Того же уровня явление.

В пролетевшей ссылке на Гитхаб хотели в импортируемую нативную функцию, принимающую MyStruct*, вместо указателя отдавать null-ссылку. Функция просит указатель, в C# есть указатели, в чём проблема? От того что в коде где-то будет написано ref и не будет написано unsafe, он не станет ни безопаснее, ни надёжнее. Если кому-то страшно писать слово unsafe, то и правильно, оно специально страшное. Зато честное.
Re[11]: ref local vs null
Здравствуйте, vdimas, Вы писали:

A>>Максимум что можно сделать с самой ссылкой, перенаправить её в новое место, явно указав, куда именно;

V>Также с указателями, заметь.
V>В С++ с ссылками так поступать нельзя.

Потому что текущий синтаксис не позволяет отличить переназначение ссылки от присваивания. Есть более концептуальные причины?

A>>а не как с указателями, где можно прибавить к адресу левое число — авось куда-нибудь да попадём.

V>Да без проблем:
V>https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.unsafe.add?view=dotnet-plat-ext-2.1#System_Runtime_CompilerServices_Unsafe_Add__1___0__System_IntPtr_
V>...

Почему оно не на C#?

A>>Указатель подразумевает, что есть непревырвая последовательность ячеек памяти, которые можно последовательно или произвольно читать и писать.

V>Ты не поверишь... ))
Не поверю.

A>>Ссылка же указывает на какую-то конкретную ячейку памяти, в которой гарантированно хранится что-то полезное.

V>Угу, типа сабжа — ссылки на null.

При большом желании можно и ... строку сделать отрицательной длины. Того же уровня явление.

В пролетевшей ссылке на Гитхаб хотели в импортируемую нативную функцию, принимающую MyStruct*, вместо указателя отдавать null-ссылку. Функция просит указатель, в C# есть указатели, в чём проблема? От того что в коде где-то будет написано ref и не будет написано unsafe, он не станет ни безопаснее, ни надёжнее. Если кому-то страшно писать слово unsafe, то и правильно, оно специально страшное. Зато честное.