次のコードでは、任意のメモリ位置にある構造体へのポインタを作成します。
[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
で、そのタイプでポインターを構築できるようにするための制約は何ですか?CIL
C#
MSDNのこのページには、、、、、、、、、、、、、、、、列挙型とポインタが許可されているほかsbyte
、 「アンマネージ型のフィールドのみを含むユーザー定義の構造体型」と記載されていますが、アンマネージ型の項目は指定されていません。タイプはです。byte
short
ushort
int
uint
long
ulong
char
float
double
decimal
bool