C#におけるカプセル化とは?アクセス修飾子を使った実装方法を解説
カプセル化(Encapsulation)は、オブジェクト指向プログラミングにおける重要な概念の一つです。C#では、クラスの内部実装の詳細を外部から隠し、不正なアクセスや意図しない変更を防ぐためにカプセル化を利用します。具体的には、アクセス修飾子を使用することで実現できます。
C#で利用できるアクセス修飾子
C#でサポートされている主なアクセス修飾子は以下の5種類です。
- public:すべてのコードからアクセス可能
- private:同じクラス内からのみアクセス可能
- protected:同じクラスおよび派生クラスからアクセス可能
- internal:同じアセンブリ(プロジェクト)内からアクセス可能
- protected internal:同じアセンブリ内、または派生クラスからアクセス可能
privateによるカプセル化の例
カプセル化の仕組みは、privateアクセス修飾子の例を見ると分かりやすくなります。privateを指定すると、そのメンバ変数やメソッドは他のクラスやオブジェクトから隠され、同じクラス内からしかアクセスできなくなります。
次の例では、lengthとwidthという変数にprivateアクセス修飾子を指定しています。これにより、これらのフィールドはRectangleクラスの外側から直接操作できません。
サンプルコード
using System;
namespace RectangleApplication {
class Rectangle {
private double length;
private double width;
public void Acceptdetails() {
length = 10;
width = 15;
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}実行結果
Length: 10 Width: 15 Area: 150
カプセル化のポイント
この例では、lengthとwidthはprivateとして宣言されているため、Mainメソッドから直接「r.length = 20;」のように値を書き換えることはできません。代わりに、publicとして公開されたAcceptdetails()メソッドを通じてのみ値を設定できる仕組みになっています。
このようにカプセル化を行うことで、以下のようなメリットが得られます。
- データの意図しない書き換えや破壊を防止できる
- クラス内部の実装を自由に変更でき、保守性が向上する
- publicなメソッドを通じてのみ操作させることで、データの整合性を保てる
実際の開発では、フィールドをprivateにし、必要に応じてプロパティ(get/setアクセサ)を公開する手法も広く使われています。カプセル化を適切に行うことは、安全で保守性の高いC#プログラムを書くための基本となります。
-
Pythonの文字列の最大長はどれくらい?sys.maxsizeで確認する上限サイズ
Pythonにおける文字列の最大長Pythonで扱える文字列の最大長は、固定値ではなく実行環境(プラットフォーム)に依存します。具体的には、システムが利用できるアドレス空間や搭載メモリ(RAM)の容量によって上限が決まります。sys.maxsizeで上限を確認する標準ライブラリのsysモジュールに定義されている定数sys.maxsizeを参照すると、その環境での最大サイズを確認できます。64ビットシステムでは 263 − 1(9223372036854775807)が返されます。>>> import sys>>> sys.maxsize92233720368
-
Python文字列の最大長はどれくらい?メモリと環境による上限を解説
Python文字列の最大長は環境によって決まるPythonにおける文字列の最大長は、理論上の上限よりも、実際に利用できるメモリ容量とPythonの実行環境(32ビットか64ビットか)によって決まります。言語仕様上、文字列の長さは Py_ssize_t 型で管理されており、64ビット環境では最大約9.2×1018(263-1)文字まで扱えることになっています。しかし、現実的にはこの上限に達する前にメモリが足りなくなります。64ビット環境の場合64ビット版のPythonを搭載し、64GBのメモリを備えたマシンであれば、約63GB程度の巨大な文字列でも十分に扱うことが可能です。さらにメモリを増設すれ