コードの入力を節約するために、別のクラスから返されたメンバーにテキストを追加する方法を見つけたいと思います。それはおそらく意味がないので、例です。私が取り組んでいるのは、テストデータを管理するためのクラスです。
public class TestFiles
{
private const string File1RelativePath = @"TestData\File1.xml";
private const string File2RelativePath = @"TestData\File2.xml";
private static string RootPath()
{
// don't know the deployment location until runtime
return Some_DirectoryName_Determined_At_Run_Time_Returned_BySomeOtherModule();
}
public static string File1
{
get { return Path.Combine(RootPath() + File1RelativePath); }
}
public static string File2
{
get { return Path.Combine(RootPath() + File2RelativePath); }
}
}
このクラスは私が望んでいることを正確に実行し、次のように簡単に呼び出すことができます。
String FileToUseForTest = TestFiles.File1;
問題は私が怠惰であるということです、そして私がさらにファイルを追加するとき、私は2つの場所でそれをしなければなりません:定数文字列とgetプロパティ。ゲッターに文字列リテラルを含めることもできますが、それでも各ゲッターでPath.Combine(RootPath()...を呼び出す必要があります。これは私にとっては非常に手間がかかります。
したがって、以下に示す理由で機能しない別のアプローチを試してください。
public class TestFiles
{
public class FileRelativePaths
{
private const string File1RelativePath = @"TestData\File1.xml";
private const string File2RelativePath = @"TestData\File2.xml";
}
private static FileRelativePaths relPaths = new RulePackages();
FileRelativePaths FullPaths
{
get { return relPaths; }
}
private static string RootPath()
{
// No longer called, but somehow need to find a way to append to paths returned in FullPaths
return Some_DirectoryName_Determined_At_Run_Time_Returned_BySomeOtherModule();
}
}
これはほぼ機能します。強い型付けを取得し、発信者は次の方法でファイルを取得できます。
String FileToUseForTest = TestFiles.FullPaths.File1;
しかし、問題は、これが相対パスのみを提供していることです。ここで、返された文字列にコードを追加したかったのです(RootPath()メソッドを使用)。
それで、強い型付けを持ち、コードの長さを最小限に抑えながら、これを機能させる方法はありますか?私は上記の最初のアプローチを使用することに少し辞任しましたが、創造的な解決策があるかどうか尋ねたいと思いました。