web-dev-qa-db-ja.com

C#でクラスのサイズを見つける方法

public class A
{
  int x;
  float y;
}

C#でクラスのサイズを見つける方法。以前はC++で使用されていたSizeof()のような演算子はありますか?

18
Sunil

短い答え:

あなたはいけません。

長い答え:

入力するレイアウトが固定されていて、管理対象メンバーがない場合にのみ、これを実行できます。構造体はデフォルトで修正されています。クラスは、固定レイアウトを持っていると見なすことができます。

(実際には必要ないため、方法は示していません。相互運用を行う場合にのみ重要です。)

9
leppie

以下は、C#クラスのサイズを示します。

Marshal.SizeOf(typeof(Myclass));

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
class Myclass
{

}

クラスのサイズはパディングによって異なることに注意してください。

25
Ritesh

クラスをメモリストリームにシリアル化して、そこからサイズを取得することもできますが、必要がない限り、これを行うことはお勧めしません。

2
anthonyv

sizeof演算子を使用すると、ポインターのサイズが取得されます(これは、明らかにすべてのオブジェクトで同じになります)。

独自のメソッドを作成し、オブジェクトのすべてのメンバー(または関心のあるメンバー)に対して(リフレクションを使用して)反復し、個々のメンバーのサイズを追加することができます。

トリッキーな部分は、ネイティブタイプではないメンバーのサイズを決定できるでしょう...あなたのメソッドは、いくらか「再帰的」でなければなりません。

上記のアイデアを実装する場合、オブジェクトのおおよそのサイズがわかります。

0
Esteban Araya