Расширение ответов SLaks.
Семейство делегатов Func<T>
является общим и позволяет настраивать тип аргументов и возвращаемых значений.Хотя ref
вносит вклад в систему типов C #, на самом деле это не тип на уровне CLR: это модификатор места хранения.Следовательно, невозможно использовать универсальное создание экземпляра для контроля того, является ли конкретное местоположение ref
или нет.
Если бы это было возможно, было бы очень легко создать совершенно неверный код.Рассмотрим следующее
T Method<T>() {
T local = ...;
...
return local;
}
Теперь рассмотрим, что произойдет, если разработчик назвал Method<ref int>()
.Он будет производить как локальное, так и возвращаемое значение, равное ref
.Это приведет к неверному коду C #.