やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

C#における型、クラス、オブジェクト、インスタンスの違い

 説明がなかったので自分なりにまとめた。

結論

名前 概要
型(タイプ) 静的型付言語におけるデータ型。代入時などで異なる型のときコンパイルエラー検出できる
クラス 型の一種。フィールド変数とメソッドで構成される構造。継承とポリモーフィズムをサポートする
オブジェクト ソフトウェア内でメモリ確保されたものすべて
インスタンス クラスからnewでメモリ確保された変数。型情報も持つ。その変数の型はnewしたクラスである。

補足

  • 型は非静的型付言語にはない
    • 型違いによるエラーは実行時でないと検出できない
      • エラーを発見できない。全コードを実行するテストコードを書かねば。
  • 型はクラス以外にも構造体や列挙体がある
    • イベントやデリゲートも型かも?
  • newされたらインスタンス、そうでないならオブジェクト、だと思う
    • たとえばクラスメソッドやクラス変数は、インスタンスでなくオブジェクトだと思う

以前

 「C# 型 クラス オブジェクト インスタンス 違い」でググったら過去に私が書いた記事を発見。え、覚えてない。そして読んでもよくわからんかった。お前は何を言っているんだ? 自動翻訳はよ。

きっかけ

 MicrosoftによるC#ツアー。「クラスとオブジェクト」という見出しが銘打たれているにもかかわらず、オブジェクトに関する説明がない。ついでに型、インスタンスという語も使われているのに、説明がない……。

名前 概要
型(タイプ) -
クラス C# の最も基本的な型。インスタンスの定義を提供し、オブジェクトとも呼ばれる
オブジェクト -
インスタンス -

 クラス以外の説明が見当たらなかったんですけど……。なのに当然のごとく用語が乱用されてるんですけど……。タイトルが「クラスとオブジェクト」と銘打っているのに、オブジェクトの説明がないのは如何なものかと思うのですけど……。説明もなしに専門用語を乱発すれば混乱と学習意欲の低下を招くとあれほど……。

結論

名前 概要
型(タイプ) 処理を制約したもの
クラス 型の一種。継承とポリモーフィズムをサポートする
オブジェクト メモリ確保されたものすべて
インスタンス クラスからnewでメモリ確保された変数

 型とは何か。処理の制約である。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux