разбираюсь с box/unbox, просматриваю свой код на наличие операторов box через ildasm.exe
Вникая в литературу разобрался с самыми банальными вещами, но возник один вопрос на который не могу найти ответа, прошу объяснить.
class Program
{
static ManagerMyClass ManagerMyClass = new ManagerMyClass();
static void Main(string[] args)
{
//first example
MyClass myClassLink = null;
ManagerMyClass.GetClassLink(ref myClassLink);
var myStruct = new MyStruct(myClassLink.A);
//second example
var myStruct2 = new MyStruct();
ManagerMyClass.GetMyStruct(ref myStruct2);
}
}
struct MyStruct
{
internal readonly uint A;
internal MyStruct(uint A)
{
this.A = A;
}
}
class MyClass
{
internal readonly uint A;
internal MyClass(uint A)
{
this.A = A;
}
}
class ManagerMyClass
{
readonly MyClass MyClass = null;
internal ManagerMyClass()
{
this.MyClass = new MyClass(1);
}
internal void GetClassLink(ref MyClass MyClass)
{
MyClass = this.MyClass;
}
internal void GetMyStruct(ref MyStruct MyStruct)
{
MyStruct = new MyStruct(this.MyClass.A);
}
}
Верно ли, что при использовании метода ManagerMyClass.GetMyStruct() происходит невидимая упаковка переменной myStruct2 и последующая распаковка? Или это работает иначе?
Упаковка не производится, просто значение передается по ссылке.
Не следует путать понятие передачи по ссылке с понятием ссылочных типов. Эти два понятия не совпадают. Параметр метода может быть изменен с помощью ref независимо от того, принадлежит ли он к типу значения или ссылочному типу. При передаче по ссылке упаковка-преобразование типа значения не производится.
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/ref
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости