public : array<Byte>^ Foo(array<Byte>^ data)
動的サイズのマネージド配列を取得します
しかし、固定サイズの管理されたバイト配列を取得するにはどうすればよいですか?
C# ユーザーに強制的に 8 バイト配列を送信させたい。8 バイトが返されます
スタイル:
public : Byte[8] Foo(Byte[8] data)
編集:
安全なコンテキストでは不可能な理由を説明できますか?
正確に 8 バイトを強制したい場合は、代わりにlong
orを送信することを検討してください。ulong
古い学校ですが、機能します。また、オブジェクトを必要としないという利点もあります (abyte[]
はオブジェクトです)。これは純粋な値型 (この場合はプリミティブ) です。
C# では、これを行うことはできません。配列の長さを検証する必要があり、長さが 8 でない場合は例外をスローする必要があります。
また、関数の型を ; にすることはできませんByte[8]
。に変更する必要がありますByte[]
。
構造体内で固定サイズのバッファを使用できます。ただし、安全でないブロックにある必要があります。
unsafe struct fixedLengthByteArrayWrapper
{
public fixed byte byteArray[8];
}
inline_array
C++ 側では、この型を表すために を使用する必要があります。
マークが正しく言っているように、固定サイズのバッファは楽しくありません。おそらく、ランタイムの長さのチェックを行う方が便利であることがわかるでしょう。