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