Можно ли замаскировать ссылку с помощью интерфейса без выделения кучи?C#

Место общения программистов C#
Ответить
Anonymous
 Можно ли замаскировать ссылку с помощью интерфейса без выделения кучи?

Сообщение Anonymous »

Наличие следующих двух классов

Код: Выделить всё

interface IMask
{
string GetName();
}

readonly struct StructSource : IMask
{
string IMask.GetName()
{
throw new NotImplementedException();
}
}
Как мы можем передать ссылку на ValueType, приведенную к интерфейсу? Поэтому мне не нужно распространять общий аргумент в дальнейшем. Можно ли добиться этого без выделения кучи?
Предположим следующий идеальный мир.

Код: Выделить всё

using System.Runtime.CompilerServices;

void UseValue(ref T value) where T : IMask
{
ref IMask ptr = ref Unsafe.As(ref value);
useInterfaceReference(in ptr);
}
void useInterfaceReference(in IMask target)
{
target.GetName();
}
но это не работает должным образом, ссылка обнуляется, возможно, из-за несоответствия типов.


Подробнее здесь: https://stackoverflow.com/questions/787 ... allocating
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»