質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

2347閲覧

内部クラスとその型のプロパティ名がかぶってしまう場合の解決方法

concern12

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/05/09 12:48

、C#で内部クラスとその内部クラスの型のプロパティ名をかぶってしまうのですが、この問題を解決する一般的な手法はあるのでしょうか?
プロパティ名を変えたり、内部クラスではないようにするといった手法しか解決方法はないのでしょうか?

よろしくお願いいたします。

cs

1public class Hoge 2{ 3 4 public HogeHoge HogeHoge { get; } 5 6 public class HogeHoge 7 { 8 } 9}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2021/05/10 00:34

その解決方法で良さそうですが、それ等の方法では何か問題があるのでしょうか。 あるならそれを質問に記述すると別の回答がもらえるかもしれません。
hihijiji

2021/05/10 01:25

C#では内部クラスを使うこと自体が悪手とされています。 悪手を前提とした好手などありません。
concern12

2021/05/10 03:10

>その解決方法で良さそうですが、それ等の方法では何か問題があるのでしょうか。 頂いた回答に対しての返信でも述べましたが、特に問題はなく、一般的にはどうしているのかと疑問に思っただけです。 もう少し私の質問内容を吟味すべきだったかもしれません。 >C#では内部クラスを使うこと自体が悪手とされています。 publicな内部クラスが悪手だということはわからなくもないですが、標準ライブラリでも普通に使われていますし、内部クラスが悪手ということは個人的には聞いたことはありません。 msdnなどで述べられている箇所がありましたら教えていただきたいです。
hihijiji

2021/05/10 03:42

出典は公式な文書ではなくblogか何かなにかだったと思いますが、 言語仕様的にもアクセス修飾子的にも適切に制限する方法がないって理由でした。 要は隠蔽はできないし公開するなら内部クラスにする必要はないよねってことです。
guest

回答3

0

クラス名を,そのクラスの機能や意味等から HogeHoge とするのが妥当だと思えるとき,
その型のプロパティの名称もまた,同じ理由から HogeHoge が妥当だと思える.
でも,そのクラスが内部クラスの場合に,残念ながらコンパイルが通らない,と.


うーん…

本当に HogeHoge そのものを公開する必要があるのか?
公開することが必要なのは HogeHoge が提供する機能なのであって,実装ではないのではないか?

とか何とか考えて,こんな感じに逃げるとか…?

CSharp

1class Hoge 2{ 3 public interface IHogeHoge{} 4 private class ConcreteHogeHoge : IHogeHoge {} 5 6 public IHogeHoge HogeHoge{ get; } 7}

(単純に「一方の名前を変える」よりも事態が悪化しているような気がしないでもない)

投稿2021/05/10 04:08

fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/05/10 04:14

質問者さんが問うているのは。(自ら招いた感はあるものの)当該問題に対する解決方法の「一般的な手法」なのだと思います。
fana

2021/05/10 04:14

(圧倒的な正論を添えて低評価願います!)
concern12

2021/05/10 08:06 編集

>クラス名を,そのクラスの機能や意味等から HogeHoge とするのが妥当だと思えるとき~ まさにこのことでした。 皆さんの反応からみるに言葉足らずでした。失礼いたしました。 ご回答ありがとうございました。
guest

0

ベストアンサー

一般的な方法は、どちらかの名前を変えること。

無理やりに行いたい場合はインターフェースを使う。

C#

1public interface IHogeHoge 2{ 3 public Hoge.HogeHoge HogeHoge { get; } 4} 5 6public class Hoge : IHogeHoge 7{ 8 HogeHoge IHogeHoge.HogeHoge { get; } 9 10 public class HogeHoge 11 { 12 } 13}

投稿2021/05/10 04:26

Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/05/10 04:29

同じ名前を別のものにつけようとするのがそもそもの間違い。 名前を変えればいいだけ。
concern12

2021/05/10 08:00

単純に別の名称にしようと思います。 ありがとうございました。
guest

0

あなたがつけるクラス名なら、あなたが気をつければいいのでは

投稿2021/05/09 13:14

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

concern12

2021/05/09 14:02

気をつける云々という話ではありません・・・
y_waiwai

2021/05/09 14:04

なんかで自動生成されるようなもんなんですか? クラス内クラスって滅多に書く必要が出るもんじゃないと思いますが
concern12

2021/05/09 14:18

めったに書くことはありませんが、このような状況に陥ったときに一般的にはどうしているのかなと疑問に思ったので質問に至った次第です。
maisumakun

2021/05/09 14:25

いちばん素直な、「名前を変える」という選択肢を放棄せざるを得ないのはなぜでしょうか?
concern12

2021/05/09 14:34

名前を変えるという手法以外であるのかなと思ったためです。 特に深い理由はありません。
dodox86

2021/05/09 23:58

何か妙なご質問ですね。「かぶってしまう」と書かれると、IDEなどでの自動生成で不可抗力的にクラス名とプロパティ名が同じ名前にされてしまって困るので、それを解決する方法というのであれば理解できますが、本問題でプロパティ名をかぶらせているのは質問者さん自身なのですから、それを解決するには質問者さんがそうしないようにするしかない気がするのですがどうですか。 「クラス名とプロパティ名が同じ場合(言うなればかぶっている場合)、見分けるための解決策は?}とか言うのであれば質問内容的には理解できます。
YAmaGNZ

2021/05/10 00:12

一般的な話というのであれば、「一般的には同じ名前にならないよう設計する」で終わる話ではないでしょうか。
concern12

2021/05/10 03:13

>一般的な話というのであれば、「一般的には同じ名前にならないよう設計する」で終わる話ではないでしょうか。 それ以外の一般的な解決方法があると思ったため質問に至りました。 多くの方から返信していただいて、プロパティ名を変更するか内部クラスではないようにする以外はないとわかりました。 ありがとうございました。
y_waiwai

2021/05/10 03:16

内部クラスだから、名前がかぶるというような特殊な事情があるんでしょうか? なんか最初から今までいまいち話がわかってません
maisumakun

2021/05/10 03:20

> それ以外の一般的な解決方法があると思ったため どうしてそう思ったのでしょうか?
maisumakun

2021/05/10 03:24

> このような状況に陥ったときに 陥ること自体が一般的ではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問