rksoftware

Visual Studio とか C# とかが好きです

C# 9.0 の確認「関数ポインター」

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 コードということで書かない人はまったく書かないと思います。私も普段まったく書きません。
しかし、必要ならば書くことになりますし、備えます。構文簡単ですし。