◆ int や char などキーワードは実体が Int32, Char などがある
◆ それらの種類は struct
◆ string (String) は class

いまさらなのですが C# の int とか bool とかって struct なのですねー

なんとなく右クリックして定義に移動を押してみて 気づきました

それに C 風に書けるようにしてる int や bool などのキーワードは実体が別にあってちゃんと大文字から始まるんですねー
float だけ別の名前で Single なのがちょっと意外
double を考えると float より single が正しい呼び方?

あと string だけは class でした
char の集まりなわけですしね
null も入れられますし

keyword実体種類
intInt32struct
shortInt16struct
longInt64struct
uintUInt32struct
ushortUInt16struct
ulongUInt64struct
byteBytestruct
sbyteSBytestruct
decimalDecimalstruct
floatSinglestruct
doubleDoublestruct
charCharstruct
stringStringclass



メソッドが使えるのも struct でオブジェクトだからなんですねー


JavaScript だと Number 型や Boolean 型はオブジェクトでないプリミティブ値で Object を継承してません
> typeof 1 === "object"
// false

> 1 instanceof Object
// false

> "a" instanceof Object
// false

> function A(){}
> new A() instanceof Object
// true

ですがメソッド呼び出しなどプロパティを取り出せます
null みたいに プロパティアクセスでエラーが起きません

これらのプリミティブ値はプロパティアクセスしたときに一時的に対応するオブジェクトに変換してそのプロパティを取り出す特別な仕組みで そのせいで 「1..property = 1」 と代入もできますが一時オブジェクトは評価後に捨てられるので 代入してもその値は取り出せないという初心者にはバグな元もあったりします


JavaScript に慣れすぎてるせいか C# の int なども特別な扱いされてるんだろうと思い込んでましたが普通に struct なオブジェクトだったのですね