unsafe
C# でorfixed
キーワードを使用すると、アンマネージ型byte*
int*
などへのポインターを定義できます。アンマネージ型のみを含む構造体へのポインターも定義できます。次に例を示します。
namespace a
{
struct MyStruct
{
int value1;
int value2;
}
class b<T>
{
unsafe void SomeMethod()
{
MyStruct* ptr;
}
}
}
ただし、がジェネリック クラス定義内struct
で定義されている場合、 error が発生します。この制限の理由は何ですか?CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type
更新: このエラーは、含まれているクラスがジェネリックである場合にのみ発生します。エラーの理由はまだわかりません.ジェネリック型を参照していないため、コンパイラは構造体に常にアンマネージ型が含まれることを確認できますT
。
namespace a
{
class b<T>
{
struct MyStruct
{
int value1;
int value2;
}
unsafe void SomeMethod()
{
MyStruct* ptr; // gives a compiler error
}
}
}
注:この機能は最終的なバージョンで C# に追加されるようです: GitHub でこの問題を参照してください。