雪国の技術的な夏

プログラミング的な話や特定のツール設定の話など。 ※ただし変態に限る。

TODO:プロパティのゲッター、セッターは必要か?(C#)

最近の記述では get:set; で事足りる。
WPF(.xaml)だとプロパティじゃないとダメなのはある。(そんな説明聞いてないよ僕)
セッターでチェック入れるなどなら意味はあると思う。

public class Iii
{
    // 個人的には行数が大幅に増えるため目が痛い(脳内に入る情報量が単純に3倍)
    // regionでくくればいい問題じゃないんだよ!!(な、なんだってーー!!)
    // そもそも記述法として古い
    // カプセル化の思想。
    private int i1 = 0;
    public int GetI1()
    {
        return i1;
    }
    public void SetI1(int i)
    {
        i1 = i;
    }


    // こっちのが簡素、コメントも一つ分だけで分かりやすい。
    // ただしWPFなどでBindを考慮しない限りは{get;set;}のプロパティ記述は不要と思われる。
    // インテリセンス(だっけ?)でVS側に余分な処理が走ってしまう。
    // public定義とかカプセル化の思想なんてなかったんや…。
    public int i2 { get; set; } = 0;


    // 特に理由がないならこれが一番簡素でいいと思っている
    // public定義とかカプセル化の思想なんてなかったんや…。
    public int i3 = 0;


//TODO:記述法はこれでよかったっけ?
    // これぐらいget;set;内で判定処理があるなら意味はあると思う
    // (例えばセット時にファイルフルパスセットとか※get時にフルパス返すとかナンセンスね)
    public int? i4
    {
        get
        {
            if (this = null)
                return 0;
            else
                return this;
        }
        set
        {
            if (0 <= value)
            {
                this = value;
            }
            else
            {
                throw new ArgumentException("マイナスはセットできません!"); // じゃあuint型にしろよという苦情は受け付けません
            }
        }
}

※ローカルでのコーディングなのでビルドエラー出たらごめん


またパフォーマンスに関してはどちらが上かは未確認。
誤差の範囲だと思っている。

ビルド時にどちらが容量(出力byte数)多いかに関しても未確認。
多分いい感じに最適化すると思われるので変わらないと予想。

結局は参照型変数であった場合にカプセル化してても、
値を直接触れる記述すれば意味ないと思う。
それにget;set;の記述内で色々できるし。
・{get;}
・{set;}
・{private set;get;}
とか。



とまぁ、今は自分の中で答えが出ていない案件。
カプセル化厳守のプロジェクトに参加した場合は頭が痛くなりそう。諦めて。