Что происходит когда мы используем значимые типы данных с ключевыми словами ref и out?
Использование ключевых слов out и ref со значимыми типами даёт тот же результат, что и передача ссылочного типа по значению.
Они позволяют методу управлять единственным экземпляром значимого типа. Вызывающий код должен выделить память для этого экземпляра, а вызванный метод управляет выделенной памятью.
В случае ссылочных типов вызывающий код выделяет память для указателя на передаваемый объект, а вызванный код управляет этим указателем. В силу этих особенностей использование ключевых слов out и ref со ссылочными типамя полезно лишь когда метод собирается "вернуть" ссылку на известный ему объект.