C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: クラスのサイズ取得


(過去ログ 52 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■28690 / inTopicNo.1)  クラスのサイズ取得
  
□投稿者/ .SHO (242回)-(2008/11/28(Fri) 20:53:11)

分類:[C#] 

2008/11/28(Fri) 20:53:39 編集(投稿者)
C#ではクラスを構造体のように使用できますが
このクラスのサイズを取得できないでしょうか?

たとえば

private class DATA {
    byte kind;
    byte ratio;
    int  real;
    int  comment;
    int  all;
}
DATA data = new DATA();

のようにして

sizeof( DATA ) もしくは sizeof( data ) みたいな感じ(実際はコンパイルエラー)
で、14(パディングされるなら16)という値を取得したいのですが。

引用返信 編集キー/
■28691 / inTopicNo.2)  Re[1]: クラスのサイズ取得
□投稿者/ 出水 (97回)-(2008/11/28(Fri) 21:11:46)
そもそも、何のためにその値が必要なんでしょうか
C#では、それを取得しても使い道がないはずなんですけど
引用返信 編集キー/
■28692 / inTopicNo.3)  Re[2]: クラスのサイズ取得
□投稿者/ .SHO (243回)-(2008/11/28(Fri) 21:17:41)
No28691 (出水 さん) に返信

> そもそも、何のためにその値が必要なんでしょうか
> C#では、それを取得しても使い道がないはずなんですけど

この質問投げてから、出来る前提でコーディングを先に進めてたんですが
確かに、この値を得てもどうにもならないかも?と思い始めてたところでした。

すっきりしました。別の実装考えます。
ありがとうございました。
解決済み
引用返信 編集キー/
■28695 / inTopicNo.4)  Re[1]: クラスのサイズ取得
□投稿者/ よねKEN (23回)-(2008/11/28(Fri) 23:12:49)
> C#ではクラスを構造体のように使用できますが
> このクラスのサイズを取得できないでしょうか?

classでなくstructが相手なら、Marshal.SizeOfメソッドで一応求められます。
(アンマネージDLLとやりとりするときに使うメソッドですが)
引用返信 編集キー/
■28696 / inTopicNo.5)  Re[2]: クラスのサイズ取得
□投稿者/ なちゃ (221回)-(2008/11/28(Fri) 23:20:18)
No28695 (よねKEN さん) に返信
>>C#ではクラスを構造体のように使用できますが
>>このクラスのサイズを取得できないでしょうか?
>
> classでなくstructが相手なら、Marshal.SizeOfメソッドで一応求められます。
> (アンマネージDLLとやりとりするときに使うメソッドですが)

まあでもどっちにしてもマネージな世界でのサイズではないんですよね。
どういう使い方をしようとしていたかにもよりますが。

解決済み
引用返信 編集キー/
■28700 / inTopicNo.6)  Re[3]: クラスのサイズ取得
□投稿者/ NyaRuRu (73回)-(2008/11/29(Sat) 07:57:26)
2008/11/29(Sat) 08:00:41 編集(投稿者)
2008/11/29(Sat) 07:58:19 編集(投稿者)

No28696 (なちゃ さん) に返信
> ■No28695 (よねKEN さん) に返信
> >>C#ではクラスを構造体のように使用できますが
> >>このクラスのサイズを取得できないでしょうか?
>>
>>classでなくstructが相手なら、Marshal.SizeOfメソッドで一応求められます。
>>(アンマネージDLLとやりとりするときに使うメソッドですが)
>
> まあでもどっちにしてもマネージな世界でのサイズではないんですよね。
> どういう使い方をしようとしていたかにもよりますが。

値型のマネージドな世界でのサイズなら sizeof OpCode で取得できます.
http://msdn.microsoft.com/ja-jp/library/system.reflection.emit.opcodes.sizeof.aspx

C# では,unsafe コンテキストでのみ使用可能な sizeof 演算子としてこの機能が公開されています.(プリミティブ型であれば,C# 2.0 以降 unsafe は不要)
http://msdn.microsoft.com/ja-jp/library/eahchzkf.aspx

解決済み
引用返信 編集キー/
■28710 / inTopicNo.7)  Re[3]: クラスのサイズ取得
□投稿者/ .SHO (246回)-(2008/11/29(Sat) 11:27:41)
No28696 (なちゃ さん) に返信

> どういう使い方をしようとしていたかにもよりますが。

一応説明しておきます。

固定長レコードでいいので、簡易データベースを作ってライブラリとして
提供して欲しいという仕事がきて、それを設計してました。
(プログラムの外部にoracleなどのデータベースを設置するほどコストを
 かけず、それなりに容量の多いデータを素早く検索できる機能を
  EXEの中にリンクしてしまいたいという要求でした)

で、それなら検索はハッシュ関数で行えばいいし、固定長レコードのサイズは
テーブル作成時の最初に、クラスで(構造体でもいいのですが)

private class DATA {
    byte kind;
    byte ratio;
    int  real;
    int  comment;
    int  all;
}

のように書いて、sizeof(DATA) のような感じ受ければいいかな?
と考えた次第です。

解決済み
引用返信 編集キー/
■28729 / inTopicNo.8)  Re[4]: クラスのサイズ取得
□投稿者/ らッシー (1回)-(2008/11/29(Sat) 19:28:42)
Berkeley DB (現在は Oracle 傘下) であれば EXE に組み込んで高度な DB 処理を実施できますよ!
Subversion などメジャーなツールでも導入されているのでおすすめ!

引用返信 編集キー/
■28762 / inTopicNo.9)  Re[4]: クラスのサイズ取得
□投稿者/ aetos (17回)-(2008/11/30(Sun) 15:23:58)
No28710 (.SHO さん) に返信

> 固定長レコードでいいので、簡易データベースを作ってライブラリとして
> 提供して欲しいという仕事がきて、それを設計してました。
> (プログラムの外部にoracleなどのデータベースを設置するほどコストを
>  かけず、それなりに容量の多いデータを素早く検索できる機能を
> EXEの中にリンクしてしまいたいという要求でした)

SQL Server Compact じゃだめかな…?
引用返信 編集キー/
■28791 / inTopicNo.10)  Re[5]: クラスのサイズ取得
□投稿者/ .SHO (253回)-(2008/12/01(Mon) 09:50:01)
らッシーさん、aetosさん、ありがとうございます。

それをやってしまうと$にならなくなってしまうので^^;
ちょっと無理です。
でも情報ありがとうございます。個人的に調べてみます。

結局、固定長にしてもたいしてメリットがなさそうだったので
可変長レコードも扱えるようにして、土日で完成させました。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -