Function pointer
delegate* ile yönetilmeyen function pointer'ı öğrenirsin.
delegate* (function pointer)
C# 9'dan beri delegate* ile yönetilmeyen function pointer tanımlanır. delegate* unmanaged<int, int> C tarzı bir fonksiyon işaretçisidir; delegate'ten çok daha hızlıdır çünkü çalışma zamanı marshal yapmaz.
Yalnızca unsafe bağlamda kullanılır ve & ile alınır, () ile çağrılır. Bu, P/Invoke yerine yüksek performanslı callback'ler için tercih edilir.
delegate* çağrısı
Bir delegate*'i çağırmak için önce bir fonksiyon adresi gerekir: delegate* unmanaged<int, int> fp = &Function;. Daha sonra int r = fp(5); ile çağrılır.
Function işaretçileri unsafe blok içinde olmalıdır; AOT derleyicilerde delegate'ten çok daha verimlidir. Bu, oyun motorları ve ses işleme gibi senaryolarda tercih edilir.
Uygulama delegate* ile Square çağır
[UnmanagedCallersOnly] static int Square(int n) => n * n; metodunu tanımla. Main'i unsafe yap. delegate* unmanaged<int, int> fp = □ ile function pointer al. int r = fp(6); ile çağır ve Console.WriteLine(r); yaz.
Örnek çözümü göster
[UnmanagedCallersOnly] static int Square(int n) => n * n; yaz. unsafe Main'de delegate* unmanaged<int, int> fp = □ int r = fp(6); Console.WriteLine(r);
Örnek çözüm:
using System;
using System.Runtime.InteropServices;
class Program
{
[UnmanagedCallersOnly]
static int Square(int n) => n * n;
static unsafe void Main()
{
delegate* unmanaged<int, int> fp = □
int r = fp(6);
Console.WriteLine(r);
}
}
Kendini test et
-
delegate* neyi temsil eder?
- Delegate sınıfı
- Generic metot
- Yönetilmeyen function pointer
- Event handler
Cevabı göster
Yönetilmeyen function pointer — Doğru. delegate*, yönetilmeyen function pointer'dır.
-
delegate* sözdizimini eşleştir
- delegate*
- Function pointer
- unmanaged
- Yönetilmeyen çağrı kuralı
- &Function
- Fonksiyon adresi
- fp(5)
- İşaretçi çağrısı
-
delegate* bildirimi
delegate* unmanaged<int, int> fp = ____Function;Cevabı göster
delegate* unmanaged<int, int> fp = &Function;