次のコードでは、任意のメモリ位置にある構造体へのポインタを作成します。
[StructLayout(LayoutKind.Explicit)]
public struct S
{
[FieldOffset(0)] int f0;
[FieldOffset(4)] int f4;
public static void Main() {
unsafe {
S* rawPtr = (S*)0x1234;
rawPtr->f0 = 42;
}
}
}
f4の型をobjectのではなくに変更するintと、エラーコンパイラエラーCS0208が発生します:のアドレスを取得できない、サイズを取得できない、または管理対象型('type')へのポインタを宣言できません。
(だけでなく)レベルstruct Sで、そのタイプでポインターを構築できるようにするための制約は何ですか?CILC#
MSDNのこのページには、、、、、、、、、、、、、、、、列挙型とポインタが許可されているほかsbyte、 「アンマネージ型のフィールドのみを含むユーザー定義の構造体型」と記載されていますが、アンマネージ型の項目は指定されていません。タイプはです。byteshortushortintuintlongulongcharfloatdoubledecimalbool