C#のクラスとオブジェクトの違いとは?基本概念とサンプルコードでわかりやすく解説
クラスとオブジェクトの基本的な違い
C#におけるクラスとは、あるデータ型の設計図(ブループリント)を定義するものです。クラス自体はあくまで「型」の定義であり、それ単体ではメモリ上に実体を持ちません。
一方、オブジェクトは、そのクラスをもとに生成された実体(インスタンス)を指します。クラスを構成するメソッドや変数は、まとめて「クラスのメンバー」と呼ばれます。
ドット演算子でメンバーにアクセスする
クラスのメンバーにアクセスするには、オブジェクト名の後にドット(.)演算子を付けます。ドット演算子は、オブジェクト名とメンバー名をつなぐ役割を果たします。
まず、newキーワードを使ってクラスからオブジェクトを生成します。
Box Box1 = new Box();
上記のコードでは、Box1 がオブジェクトです。このオブジェクトを使って、次のようにフィールド(変数)へアクセスできます。
Box1.height = 7.0;
メンバー関数(メソッド)の呼び出しも、同様にドット演算子で行います。
Box1.getVolume();
サンプルコード:クラスとオブジェクトの動作例
以下は、C#でクラスとオブジェクトがどのように連携して動作するかを示すサンプルプログラムです。Box クラスを定義し、そこから2つのオブジェクトを生成して、それぞれの体積を計算しています。
Example
using System;
namespace BoxApplication {
class Box {
private double length; // 箱の長さ
private double breadth; // 箱の幅
private double height; // 箱の高さ
public void setLength( double len ) {
length = len;
}
public void setBreadth( double bre ) {
breadth = bre;
}
public void setHeight( double hei ) {
height = hei;
}
public double getVolume() {
return length * breadth * height;
}
}
class Boxtester {
static void Main(string[] args) {
// オブジェクトを2つ生成
Box Box1 = new Box(); // Box型のBox1を宣言
Box Box2 = new Box();
double volume;
// オブジェクト経由でメンバー関数を呼び出す
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// box2 の設定
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// box1 の体積を表示
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}" ,volume);
// box2 の体積を表示
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);
Console.ReadKey();
}
}
}実行結果
Volume of Box1 : 210 Volume of Box2 : 1560
まとめ
クラスは「設計図」、オブジェクトはその設計図から作られる「実体」です。このサンプルでは、同じ Box クラスから生成された Box1 と Box2 が、それぞれ独立した値(長さ・幅・高さ)を持ち、別々の体積を計算できていることが確認できます。
つまり、1つのクラス定義から何個でもオブジェクトを生成でき、各オブジェクトは互いに影響しない独自の状態を保持できるのがオブジェクト指向プログラミングの大きな特徴です。
-
Pythonの旧スタイルクラスと新スタイルクラスの違いとは?
Python 2.xにおける2つのクラススタイルPython 2.xでは、基底クラスとして組み込み型を持つかどうかによって、クラスは「旧スタイル」と「新スタイル」の2種類に分類されます。この違いは一見些細なものに見えますが、実際にはクラスで使える機能に大きな差をもたらします。旧スタイル(クラシック)クラス組み込み型を基底クラスに持たないクラスが、いわゆる「クラシック」スタイル、すなわち旧スタイルクラスです。>>> class OldSpam: # 基底クラスなし ... pass >>> OldSpam.__bases__ ()新スタイルク
-
Pythonの__str__と__repr__の違いを徹底解説!正しい使い分けのポイント
Pythonの__str__と__repr__、その違いとは? Pythonには、オブジェクトを文字列として表現するための組み込み関数として repr() と str() の2つが用意されています。これらはそれぞれ、内部で object.__repr__(self) と object.__str__(self) という特殊メソッド(ダンダーメソッド)を呼び出します。 repr() はオブジェクトの公式な(official)表現を計算して返すのに対し、str() は非公式な(informal)表現を返します。この違いを具体的に見ていきましょう。 整数オブジェクトの場合:両者の結果は同じ まず、