エッチなインデクサをつくってみた

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

エッチなインデクサをつくってみた

投稿記事 by dic » 9年前

年齢が20歳だといいのですが、マイナス20歳だとまずいので、
インデクサを利用しました。
そこで。。。マイナスだと困るものを用意しました。

CODE:


class おっぱい
{
    int x;
    public int バスト
    {
        get
        {
            return x;
        }
        set
        {
            if( value >= 70 )
            {
                x = value;
            }
        }
    }
}

CODE:

            おっぱい oppai = new おっぱい();
            oppai.バスト = 80;
            Console.WriteLine("バストは{0}センチです。", oppai.バスト);

            oppai.バスト = -80;
            Console.WriteLine("バストは{0}センチです。", oppai.バスト);
なるものを実装してみました。
バストがマナイナスだと困るので、常にプラスの値が代入されるように
なりました。

下ネタですが、ごかんべんを・・・

// 丁寧な訂正ありがとうございます。。。
最後に編集したユーザー dic on 2016年7月07日(木) 15:47 [ 編集 1 回目 ]

YuO
記事: 947
登録日時: 14年前

Re: エッチなインデクサをつくってみた

投稿記事 by YuO » 9年前

ネタにマジレス。

setterで一部の値のみを設定可能でそれ以外は素通し,というのはわかりにくいですね。
今回の場合だと,ArgumentOutOfRangeExceptionを投げるのが一般的かと。
特定の値の場合のみ設定するならば,通常のメソッドにして名前をきっちり付けたいところです。
オフトピック
契約プログラミング的には,CodeContractsでは

CODE:

set
{
    Contract.Requires(value >= 70);
    /* ... */
}
で,spec#だとかMethod Contracts (Proposal: Method Contracts #119)なら

CODE:

set
    requires value >= 70 else throw new ArgumentOutOfRangeException(nameof(value))
{
    /* ... */
}
な感じになるのかとは思います。Method Contracts,早くC#に入らないかなぁ……(次期バージョンの次の候補にすらなっていない現状……)。


アバター
へにっくす
記事: 634
登録日時: 13年前

Re: エッチなインデクサをつくってみた

投稿記事 by へにっくす » 9年前

naohiro19 さんが書きました:csharpですよー
はしょらんでください。

codeに指定するキーワードですね。
×[code=c#]int a = 0;[/code]
○[code=csharp]int a = 0;[/code]