#C#の型#
C#をよく書く方なら当然のことだと思いますがC#の型は大きく分けて3種類あります
- 参照型
- 値型
- どちらでもない型
###参照型###
参照型はオブジェクトではなくオブジェクトの参照のみ持った型です
-
クラス型
- object
- dynamic
- string
- 配列
- デリゲート型
など
-
インターフェイス型 など
###値型###
実際にオブジェクトのすべての値を持つ型です -
構造体型
- bool
- char
- int
- double
- decimal など
-
列挙型 など
###どちらでもない型###
ポインタ型ですobject型と相互変換することができない型であり、参照型にも値型にも含まれない
#varはどこに行ったのか?#
varというものがC#にはあります
題でもvar dynamic型 object型について簡単にまとめてみたなんて書いたあるのに、出てないなんてどういうことだ!
と思う方がいると思いますが
varは型ではありません
varは型推論を行うキーワードです、なので型としての実態は存在しません、
なのでIL上にもvarなんて型はありません。
#dynamic型について#
dynamic型は動的に型を付ける型です
つまり、コンパイル時に型情報を確認しないのです
そのため思った動きをしなかったりするので
基本的には使わないことをおすすめします
では、なぜdynamic型があるかというと Python や Ruby のような動的型付けをする言語を.NET Framework上で動かすことなどを目的に追加されました。
#object型#
object型はすべてのクラスの継承元となっています。
そのためobject型はすべての型でキャストできます
また、自分で作った型もすべて指定しなければobject型の継承になります。
なので.GetTypeメソッドなどはすべての型で使えるのですね。
#最後に#
var、dynamic objectについてまとめてみました
似ている型に感じますが全然違う型であります、特にdynamic型はむやみに使うことを避けましょう