C# 9.0 の確認の目次はこちら
■ 関数ポインター
ドキュメントはこちら
パフォーマンスと相互運用 という項目の 3 つめの塊の 「関数ポインターでは、」 から始まるブロックです。
関数ポインターです。ポインターというからには unsafe で書く必要があります。
■ 検証コード
例えばこんなコードです。delegate*
が関数ポインターの宣言ですね。そして、関数のポインターを取得しているところが &
。
class Program { static void Main(string[] args) { unsafe { delegate*<string, bool> f = &string.IsNullOrEmpty; Console.WriteLine(f("")); Console.WriteLine(f("a")); } } }
C# のバージョンでは delegate*<string, bool>
次のエラーになります。
エラー CS8400 機能 '関数ポインター' は C# 8.0 では使用できません。言語バージョン 9.0 以上を使用してください。
■ 実行結果
True False
見事! string.IsNullOrEmpty(string)
が実行されています。
■ まとめ
unsafe コードということで書かない人はまったく書かないと思います。私も普段まったく書きません。
しかし、必要ならば書くことになりますし、備えます。構文簡単ですし。