none
C#では、パラメーターを有するプロパティーを作ることはできない? RRS feed

  • 質問

  • 外池と申します。言語仕様に関して、標題のとおり理解しているのですが、念のため確認です・・・。

    Visual Basicでは、パラメーターを有するプロパティーを作ることができますし、CLSでもパラメーターを有するプロパティーは許容されています。しかし、C#では作れない言語仕様になっている、という理解で正しいですよね?

    C#の言語仕様書のプロパティーとインデクサのところは一通り目を通したのですが、なんか、当前あってもよさそうな機能が無いので、見落としをしていないか不安です。


    (ホームページを再開しました)
    2009年7月14日 8:25

回答

  • C# の仕様として引数付きのプロパティは作れない、で合っていると思います。

     引数付きのプロパティを記述するる構文を追加して欲しい(C#) | Microsoft Connect
     https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=345727

    インデクサ以上のことをやる気はないような印象を受けます。
    • 回答としてマーク 外池 2009年7月15日 1:16
    2009年7月14日 11:35
  • 「あって当然」とのことですが、どういったお考えからでしょうか。
    多くの人が共感できるような便利さ、あるいは多くの人が問題と感じている使い方等を指摘できれば、今後の仕様拡張の可能性が出てくるかもしれません。
    もちろん、言語仕様として辻褄が合うことが前提になりますが…。


    私見ですが、引数を持たせるプロパティはいらないかなぁと思っています。
    凝ったことをしたいのであれば、メソッドである方が分かりやすく、無理にプロパティである必要性を感じないためです。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク 外池 2009年7月15日 1:16
    2009年7月14日 13:56
    モデレータ
  • プロパティも内部的にはメソッドですし。
    ILDASMなどのツールで生成されたDLL / EXEのメタデータを見るとわかりますが、get用のメソッドとset用のメソッドのペアがプロパティとして登録されています。
    パラメーターつきプロパティだと左辺値になれる点がメソッドと違うのかな?
    • 回答としてマーク 外池 2009年7月15日 1:16
    2009年7月14日 14:36
  • それだとプロパティ自身がいらないと言うことになりませんか?
    プロパティのメリットはセッター・ゲッターを意識させない構文ってことではないかと思いますが
    http://www.mahoroba.ne.jp/~mw_ken
    • 回答としてマーク 外池 2009年7月15日 1:16
    2009年7月14日 23:53

すべての返信

  • C# の仕様として引数付きのプロパティは作れない、で合っていると思います。

     引数付きのプロパティを記述するる構文を追加して欲しい(C#) | Microsoft Connect
     https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=345727

    インデクサ以上のことをやる気はないような印象を受けます。
    • 回答としてマーク 外池 2009年7月15日 1:16
    2009年7月14日 11:35
  • 「あって当然」とのことですが、どういったお考えからでしょうか。
    多くの人が共感できるような便利さ、あるいは多くの人が問題と感じている使い方等を指摘できれば、今後の仕様拡張の可能性が出てくるかもしれません。
    もちろん、言語仕様として辻褄が合うことが前提になりますが…。


    私見ですが、引数を持たせるプロパティはいらないかなぁと思っています。
    凝ったことをしたいのであれば、メソッドである方が分かりやすく、無理にプロパティである必要性を感じないためです。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク 外池 2009年7月15日 1:16
    2009年7月14日 13:56
    モデレータ
  • プロパティも内部的にはメソッドですし。
    ILDASMなどのツールで生成されたDLL / EXEのメタデータを見るとわかりますが、get用のメソッドとset用のメソッドのペアがプロパティとして登録されています。
    パラメーターつきプロパティだと左辺値になれる点がメソッドと違うのかな?
    • 回答としてマーク 外池 2009年7月15日 1:16
    2009年7月14日 14:36
  • それだとプロパティ自身がいらないと言うことになりませんか?
    プロパティのメリットはセッター・ゲッターを意識させない構文ってことではないかと思いますが
    http://www.mahoroba.ne.jp/~mw_ken
    • 回答としてマーク 外池 2009年7月15日 1:16
    2009年7月14日 23:53
  • 外池です。みなさんの回答、ありがとうございました。C#の言語仕様としての理解はOKということで納得です。

    Azuleanさんのご指摘の「あって当然」という表現は、私も、あまりよくなかったと反省してます。CLSで定められた仕様、あるいは、許されている仕様は、C#では実現できるものという、まぁ、私の思い込みがあった、というのが実態です。

    ちなみに、VBでパラメーターありのプロパティーを持つライブラリーを作って、C#で参照してみたらメソッドとして見えました。わざわざ「get」というPrefixがメソッド名に付加されていました。
    (ホームページを再開しました)
    2009年7月15日 1:24
  • Azuleanさんのご指摘の「あって当然」という表現は、私も、あまりよくなかったと反省してます。CLSで定められた仕様、あるいは、許されている仕様は、C#では実現できるものという、まぁ、私の思い込みがあった、というのが実態です。
    全ての仕様を取り込まないといけないという印象は持っていません。(どこかにそのことを明記してあるかは調べていません)
    言語毎にできること、できないことがいくつかあると思います。


    それだとプロパティ自身がいらないと言うことになりませんか?
    プロパティのメリットはセッター・ゲッターを意識させない構文ってことではないかと思いますが
    私的な意見ですが、var a = instance.GetValue(); とか、 instance.SetValue(a); というように、引数を持たない getter、1つの引数しか持たない setter ならプロパティ構文が良く、それ以上の引数を持つ場合は、明確にインデックスだと分かるもの以外は、メソッドにした方が良いのではと思っています。

    ただ、それを納得させるだけの材料、あるいは具体例は持ち合わせていません…。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年7月15日 13:47
    モデレータ