Как можно преобразовать обычный делегат в небезопасный делегат? Что я делаю не так?

Как исправить ошибку, связанную с передачей значения null в метод по ссылке (ref), где ref myStruct == null?
  • 19 февраля 2024 г. 20:08
Ответы на вопрос 2
Чтобы преобразовать обычный делегат в небезопасный делегат, можно воспользоваться ключевым словом `unsafe`. Например, если у вас есть обычный делегат:

```csharp
delegate void MyDelegate(int x);
```

И вы хотите преобразовать его в небезопасный делегат, можно сделать следующее:

```csharp
unsafe delegate void UnsafeDelegate(int x);
```

Чтобы исправить ошибку, связанную с передачей значения `null` в метод по ссылке (ref), где `ref myStruct == null`, можно воспользоваться ключевым словом `ref` только в случае, если `myStruct` уже инициализирована. В противном случае, попробуйте передать структуру по значению, а не по ссылке:

```csharp
MyStruct myStruct;
SomeMethod(myStruct);

void SomeMethod(MyStruct myStruct)
{
   // выполнение операций
}
``` 

Таким образом, передача структуры по значению в метод без использования ключевого слова `ref` решит проблему с передачей значения `null`.
У тебя делегат твой с замыканием, а GetFunctionPointer возвращает указатель на функцию. 
=> Делегат хочет обратиться к замыканию (`this.x`), а его нет.
Да и тк там this, то ещё в качестве первого аргумента должна вроде идти ссылка на экземпляр объекта-делегата.

Ну и unsafe delegate* - не делегат, а указатель на функцию по сути своей (уже настоящий)
Похожие вопросы