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

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

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

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

3253閲覧

ジェネリッククラスのファイル分けについて

mikupedia

総合スコア159

C#

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/01/13 02:48

編集2017/01/13 02:52

###前提・実現したいこと
Public Class GenericClass(of TResult)
Public Class GenericClass(of TParam,TResult)

このような同一クラス名のジェネリッククラスを定義するときに
どのようなファイル分けをして管理していますか?
当方はVBを使っておりますが、特に言語は問いません。

Publicなクラスは1ファイルに1つだけ、定義する旨をネットで見かけました。
それに従いファイルを分けたときにファイル名で悩みます。
ファイル名=クラス名がわかりやすいためそのようにすると

GenericClassOfTResult.vb
GenericClassOfTParamAndTResult.vb

となりますが、みなさんはこのようなファイル名の付け方をしているのでしょうか?
それとも、1つのファイルに全て定義して

GenericClass.vb

というファイル名にするのでしょうか?

その他、別案があればご教授いただけますでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。
C#で読み替えつつ回答してみます。

まず、.NETではクラスとファイルが直接関係していないので、自分の好みに従って配置してしまえば良いです。
自分の場合は、その2つが本質的に同一なものを表している(2つが継承関係にある、または全く同じインターフェースを実装し、インターフェース経由で利用されるなど)の場合は、あまりにもクラスの規模が大きいという状況でも無い限りは同一のファイルに設置してしまいます(GenericClass.cs)。
ただし、似たような存在だけど解決する事柄が違うものである場合(例えばTaskクラスとTask<T>クラスなど)は、別のファイルに分けてしまいますね。その場合は(Task_T.cs)のように適当な名前にしています。

そもそも、同じ名前でジェネリック型引数の数だけが異なるクラスというのは、どのような状況で、どのような意図で作られたのか、質問からだと読み取れませんね。せめてそのクラスが何を表す存在なのかが分かるともう少し詳しく回答できるのですが……。
ちょっと思いつく似たようなケースでは、両方の本質を表すabstract classを作成し、それを継承する形で2つのGenericClassをそれぞれの用途を表す異なる名前で定義し、(<abstract class>.<GenericClass>.cs)という名前で別々のファイルに整理したことはありますね。

csharp

1// Abstract.cs 2public abstract class Abstract<TResult> 3{ 4 // ... 5} 6 7// Abstract.XXX.cs 8public class XXX<TResult> : Abstract<TResult> 9{ 10} 11 12// Abstract.YYY.cs 13public class YYY<TParam, TResult> : Abstract<TResult> 14{ 15}

投稿2017/01/13 03:17

編集2017/01/13 03:22
tamoto

総合スコア4103

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

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

0

好みの問題かとは思います。
オープンソースのライブラリなどでは、Hoge.cs と GenericHoge.cs として管理してる例も見たことはありますね。

https://referencesource.microsoft.com/ でC#のソースを見てみると、
例えばコレクション系は、system\collections配下にilist.csなどの名前で配置し、
ジェネリックなものはsystem\collections\generic というフォルダを作って、その中に同名のilist.csで配置してますね。
名前空間もフォルダ階層と一致させているようです。

投稿2017/01/13 03:32

oika

総合スコア425

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

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

mikupedia

2017/01/23 06:52

なるほど、本家のコードも見ることができたんですね。 参考になりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問