質問: ### 前提・実現したいこと Public Class GenericClass(of TResult) Public Class GenericClass(of TParam,TResult) このような同一クラス名のジェネリッククラスを定義するときに どのようなファイル分けをして管理していますか? 当方はVBを使っておりますが、特に言語は問いません。 Publicなクラスは1ファイルに1つだけ、定義する旨をネットで見かけました。 それに従いファイルを分けたときにファイル名で悩みます。 ファイル名=クラス名がわかりやすいためそのようにすると GenericClassOfTResult.vb GenericClassOfTParamAndTResult.vb となりますが、みなさんはこのようなファイル名の付け方をしているのでしょうか? それとも、1つのファイルに全て定義して GenericClass.vb というファイル名にするのでしょうか? その他、別案があればご教授いただけますでしょうか?
回答: こんにちは。 C#で読み替えつつ回答してみます。 まず、.NETではクラスとファイルが直接関係していないので、自分の好みに従って配置してしまえば良いです。 自分の場合は、その2つが本質的に同一なものを表している(2つが継承関係にある、または全く同じインターフェースを実装し、インターフェース経由で利用されるなど)の場合は、あまりにもクラスの規模が大きいという状況でも無い限りは同一のファイルに設置してしまいます(GenericClass.cs)。 ただし、似たような存在だけど解決する事柄が違うものである場合(例えば`Task`クラスと`Task`クラスなど)は、別のファイルに分けてしまいますね。その場合は(Task_T.cs)のように適当な名前にしています。 そもそも、同じ名前でジェネリック型引数の数だけが異なるクラスというのは、どのような状況で、どのような意図で作られたのか、質問からだと読み取れませんね。せめてそのクラスが何を表す存在なのかが分かるともう少し詳しく回答できるのですが......。 ちょっと思いつく似たようなケースでは、両方の本質を表すabstract classを作成し、それを継承する形で2つのGenericClassをそれぞれの用途を表す異なる名前で定義し、(..cs)という名前で別々のファイルに整理したことはありますね。 ``` // Abstract.cs public abstract class Abstract { // ... } // Abstract.XXX.cs public class XXX : Abstract { } // Abstract.YYY.cs public class YYY : Abstract { } ```