取得と設定では異なるアクセス レベルが必要になるという理由だけで、ゲッターとセッターを書いていることがよくあります。そして、これらのゲッターとセッターは簡単です (ゲッターは返すだけで、セッターは値を設定するだけで、内部に他のコードはありません)。フィールド値を外部に対してのみ読み取りたい場合の典型的なケース (そして、すべてのフィールドに対して大量の getter 関数を記述します)。
ゲッターとセッターは内部の関数です。また、関数の呼び出しは、引数のコピー、スタック フレームのプッシュとポップ、結果のコピーなどを行う必要があるため、フィールドを設定するよりも時間がかかります。
まあ、コンパイラは関数呼び出しを最適化し、代入をインライン化するかもしれませんが、これは制御できません。C++ の inline キーワードでさえヒントに過ぎず、コンパイラはそれを自由に無視できます。関数が呼び出され、それが遅くなると想定する必要があります。
さらに、言語 (C# など) はプロパティをサポートせず、このことを模倣することはありませんが、それらはフィールドのように見える関数にすぎず、それが関数またはフィールドであることさえわかりません (IDE の助けがなければ)。
カプセル化の独断的な原則に違反することを伝えるだけでなく、書き込みと読み取りに異なるアクセス修飾子を設定できたら (たとえば、ファイル システムが行うように)、どのような問題が発生するでしょうか?