- PR -

【修正】クラス名とプロパティ名が同じにできなくて困っていませんか?

1
投票結果総投票数:11
できなくて困っている 1 9.09%
できなくても困らない 0 0.00%
できないが困っていない 1 9.09%
できる 9 81.82%
その他 0 0.00%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-12 13:27
※投票箱が途切れていたので修正しました。
 すでに投稿された方はお手数ですが再度お願いいたします。
-----------------------------------------------
投票箱:
 1. できなくて困っている
 2. できなくても困らない(なぜ困らないのか教えてください)
 3. できないが困っていない(解決策を教えてください)
 4. できる(!?)
 5. その他(命題がおかしいなど、ご指摘ください)
-----------------------------------------------

プロパティの命名について、意見を頂戴したいと思います。

1.「.NETではプロパティは大文字で始めるのが定石」
(これは、間違いないですよね?)

2.「クラス名には「C」などプレフィックスは付けない」
(マイクロソフトが推奨していると聞きました)

1、2から、

クラスAのプロパティとしてクラスBのインスタンスを持つとき、
クラスBのクラス名とプロパティ名がぶつかることってないですか?

コード:
例)
※仮コードです

// レンタカーの車ID
Class CarID {
    // 省略
}

// レンタカーの客情報
Class CustomerInfo {
    public uint ID {get; set;}  // 客ID
    public CarID CarID {get; set;}  // 車ID
}



上記はレンタカー・システムの一部で、
車IDは当初uintでしたが、IDの中に意味を持たせるという要求のため、
クラスに変えました。

客IDのほうを変更するなら、クラス名はCustomerIDで、プロパティ名は
IDでOKかと思いますが、

車IDのほうは、そうはいきません。
意味をもとに考えてもやっぱりCarIDかな? と。。。

現状は、CurrentCarIDとか、OwnCarIDとか考えまして、
最終的に、RentalCarIDとしていますが、

全体がレンタカーシステムですから、冗長な気もします。

Javaなら、
コード:
private CarID carID;
public CarID getCarID();
public void setCarID(CarID id);


とするところですが、

.NETの定石はどうなんでしょうか?

上記は一例ですので、一般的にどうなのか?
そんなことになること自体がおかしい(設計が悪い)のか?

くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-12 13:38
同じに出来ますよね。。。

提示コードをそのまま書いて、ビルド通りますよ。
(Class → class の修正は必要ですが)
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-02-12 13:46
クラス名とプロパティ名は同じにできます。(少なくともVB、C#では)

そして、本質的に同名になるべきである場合は、同じ名前にしましょう、
というのがMSのガイドラインでも明記されています。

プロパティの名前付けのガイドライン
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpgenref/html/cpconpropertynamingguidelines.asp

型のメンバの名前
http://msdn2.microsoft.com/ja-jp/library/ms229012(VS.80).aspx

msdn2の場合では列挙型の例だけを挙げているので、他の型でも同様なのかが
ちょっと曖昧ですが、.NET Framework1.0の頃のガイドラインに既に記載があるので、
列挙型以外でも同じだろうと思います。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-12 14:09
「できる」んですか!?

まさかと思いましたが、「できる」の項目作っておいて良かったぁ(笑)

実際に手近のプロジェクトでやってみたらできました!
(まさか、と思っていたのですみません<m(__)m>

しかし、

 ネームスペース名とクラス名を同じにしたら、C++/CLIからアクセスする
 ときに区別が付かなくなって困る。。。

というような、落とし穴はないでしょうか?

マイクロソフトが推奨していたとしても、上記のネームスペース名のような
例がありますからね。。。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-12 14:17
引用:

あぶぽんさんの書き込み (2008-02-12 14:09) より:

 ネームスペース名とクラス名を同じにしたら、C++/CLIからアクセスする
 ときに区別が付かなくなって困る。。。



名前空間とクラスに同じ名前を使用しないでください。たとえば、Debug 名前空間と Debug クラスの両方を作成するのは避けてください。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpgenref/html/cpconpropertynamingguidelines.asp

と書いてありました<m(__)m>

# じゃ、自動生成しないで(ToT)/~~~

# プラグインシステムで、
# プラグイン名=クラス名=プロジェクト名というプロジェクトを作っているので。。。自業自得か。。。


[ メッセージ編集済み 編集者: あぶぽん 編集日時 2008-02-12 14:23 ]
まりも
ベテラン
会議室デビュー日: 2006/08/19
投稿数: 77
投稿日時: 2008-02-12 22:36
プロパティを作って、その型をプロパティと同名の内部クラスで設定しようとして、
ちょっと困ったことがあります。

まあほとんど迷わず、プロパティ名+"Class"にしましたが。
そういう使い方なので、そのプロパティとセットでしか使わないため、
わかりにくいということもないだろうと。
1

スキルアップ/キャリアアップ(JOB@IT)