您的课程应该以某种方式相关:
class Program
{
public string PathForSavingFiles { get; set; }
}
abstract class FileBase
{
private readonly Program program;
protected FileBase(Program program)
{
this.program = program;
}
public void Save()
{
Save(program.PathForSavingFiles);
}
protected abstract void Save(string path);
}
class TxtFile : FileBase { ... }
class XlsxFile : FileBase { ... }
// etc
作为一个选项,您可以使用依赖注入(MEF示例):
interface IInfrastructureProvider
{
string PathForSavingFiles { get; }
}
class Program : IInfrastructureProvider
{
public string PathForSavingFiles { get; set; }
}
abstract class FileBase
{
private readonly IInfrastructureProvider provider;
[ImportingConstructor]
protected FileBase(IInfrastructureProvider provider)
{
this.provider = provider;
}
public void Save()
{
Save(provider.PathForSavingFiles);
}
protected abstract void Save(string path);
}
这允许您IInfrastructureProvider
出于测试目的进行模拟,并使您的组件保持松散耦合。
如果可能,请避免使用静态字段、属性或全局状态的其他变体(例如设置)。你现在拥有的全局状态越多,你以后就越头疼。