Как определяется реф-safe-context в C# при назначении локальных переменныхC#

Место общения программистов C#
Ответить
Anonymous
 Как определяется реф-safe-context в C# при назначении локальных переменных

Сообщение Anonymous »

Я новичок в C#, пытаясь выяснить, как определяется SUR-SAFE-Context в C#. Я объявил функцию foo , которая не работала, поскольку она пытается назначить переменную с декларационной блоком ref-переменной с Caller-context .

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

void Foo(ref int m /* caller-context */) {
int n = 0; // declaration-block
ref int p = ref m; // caller-context
p = ref n; /* CS8374:
* Cannot ref-assign source
* has a narrower escape scope
* than destination.
*/
}
У меня есть другая строка функций , который пытается назначить Declaration Block для функции member :

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

void Bar(int m /* function-member */) {
int n = 0; // declaration-block
ref int p = ref m; // function-member
p = ref n; // function-member = ref declaration-block
}
< /code>
Я ожидал, что он вызвал CS8374, как foo < /code> do, но компиляция успешная. Его ref-safe-context такой же, как и фек-safe-context в его инициализируемом выражении. Функциональный член 
также. Тем не менее, вот демонстрация на официальном веб-сайте: < /p>

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

public class C
{
public void M4(int p)
{
// context of r2 is declaration-block,
// ref safe context of p is function-member
ref int r2 = ref p;
}
}
Он говорит, что r2 является декларационным блоком , в то время как p -функциональный member . Я что -то не так? Как я могу объявить локальную переменную, чья рефлектрическая контекст является функцией-членом ?


Подробнее здесь: https://stackoverflow.com/questions/797 ... o-local-va
Ответить

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

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

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

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

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