C#入門:クラスメソッドとメンバー変数(クラスメンバー)の違いをわかりやすく解説
C#のようなオブジェクト指向言語では、クラスを構成する要素として「メソッド(メンバー関数)」と「メンバー変数(フィールド)」があります。この2つは役割がまったく異なり、それぞれを正しく理解することが、カプセル化を活かした良質なコード設計への第一歩となります。本記事では、両者の違いを具体的なサンプルコードとともにわかりやすく解説します。
クラスメソッド(メンバー関数)とは?
クラスのメンバー関数、すなわちメソッドとは、その定義やプロトタイプがクラス定義の中に記述される関数のことです。他の変数と同じようにクラス内で宣言され、そのクラスのオブジェクトに対して操作を行います。
メソッドの大きな特徴は、そのオブジェクトが持つすべてのメンバー(変数・関数)にアクセスできるという点です。これにより、オブジェクトの状態を読み取ったり変更したりする処理を、クラスの中にまとめて記述できます。
以下は、Boxクラスに長さと幅を設定するメソッドを定義した例です。
public void setLength( double len ) {
length = len;
}
public void setBreadth( double bre ) {
breadth = bre;
}
次に、C#でクラスのメンバー関数へアクセスする方法を示す完全なサンプルを見てみましょう。
サンプルコード:メソッドを使ってボリュームを計算する
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) {
Box Box1 = new Box(); // Box型のBox1を宣言
Box Box2 = new Box(); // Box型のBox2を宣言
double volume;
// box1 の仕様を設定
Box1.setLength(8.0);
Box1.setBreadth(9.0);
Box1.setHeight(7.0);
// box2 の仕様を設定
Box2.setLength(18.0);
Box2.setBreadth(20.0);
Box2.setHeight(17.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 : 504 Volume of Box2 : 6120
この例では、setLength() や setHeight() といったメソッドを通じて、外部からプライベートなフィールドに値を設定しています。体積の計算も getVolume() メソッドにまとめられているため、Mainメソッド側は計算方法を意識せずに済んでいます。これこそがメソッドの役割です。
メンバー変数(クラスメンバー)とは?
一方、メンバー変数(クラスメンバー)は、設計の観点から見ると「オブジェクトの属性」に相当するものです。C#では一般的にprivateとして宣言し、外部から直接アクセスできないようにすることでカプセル化を実現します。
メンバー変数はpublicなメソッド経由でのみアクセスできます。つまり「データ(メンバー変数)」と「それを操作する処理(メソッド)」がセットになり、クラスの内部構造が外部から保護されるのです。
また、メンバー変数はインスタンスごとに独立した値を持ちます。下の例では、Rectangleクラスの新しいインスタンスを作るたびに、length と width の新しいコピーが生成されます。
サンプルコード:メンバー変数とメソッドを組み合わせる
using System;
namespace RectangleApplication {
class Rectangle {
// メンバー変数
private double length;
private double width;
public void Acceptdetails() {
length = 10;
width = 14;
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}// Rectangleクラスの終わり
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
実行結果
Length: 10 Width: 14 Area: 140
クラスメソッドとメンバー変数の違いまとめ
最後に、両者の違いを整理しておきましょう。
メンバー変数(クラスメンバー)
・オブジェクトの「属性」や「状態」を保持するデータ
・通常はprivateで宣言し、カプセル化を実現する
・インスタンスごとに独立した値を持つ
クラスメソッド(メンバー関数)
・オブジェクトに対する「操作」や「動作」を定義する処理
・所属するクラスのすべてのメンバーにアクセス可能
・メンバー変数への安全なアクセス手段(ゲッター・セッターなど)を提供する
つまり、メンバー変数が「モノの状態」を表すのに対し、メソッドは「その状態に対して何をするか」を表します。この2つを適切に分離し、privateなデータをpublicなメソッドで包むことで、保守性が高く安全なC#プログラムを書くことができます。
-
Wi-Fi 6と5Gの違いとは?特徴・速度・使い分けを徹底解説
5Gネットワークは、SNSなどでも頻繁に話題になる注目の技術です。同様に、Wi-Fi 6への期待も高まっていますが、これは5Gとはまったく異なる技術です。本記事では、Wi-Fi 6と5Gネットワークの違いをわかりやすく解説します。 Wi-Fi 6とは? Wi-Fi 6は、IEEE 802.11ax規格に基づく新しい認証プログラムです。従来のWi-Fi技術と異なる最大の特徴は、より遠い距離でも高速な接続を実現できる点にあります。複数のデバイスが同時に接続されていても安定したパフォーマンスを発揮し、電源環境に多少の問題があっても性能が低下しにくいという優れた特性を持っています。 Wi-Fi 6は
-
Windows 10とWindows 11の違いを徹底比較!アップグレードすべきか判断するポイント
Microsoft(マイクロソフト)は、数々の新機能と改善点を盛り込んだ最新OS「Windows 11」をリリースしました。一方で、これまで数多くのパッチやアップデートが適用されてきたWindows 10は、新しいWindows 11よりも安定したOSと言えます。Microsoftによると、Windows 10のサポートは2025年以降に終了する予定のため、Windows 11へアップグレードするか、Windows 10を使い続けるかを検討する時間は十分にあります。この記事では、Windows 10とWindows 11の性能・機能・改善点を比較し、新しいOSへ移行すべきか、それともWindo