2

unsafeC# で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 でこの問題を参照してください。

4

1 に答える 1