我有以下情况。在我的应用程序中有一些非常普通的类,它包含一个名为“BinDirectory”的静态只读字段,该字段保存bin目录的路径。此类中的其他字段也是静态只读的,它使用此值作为其值的基础。在当前版本中,BinDirectory被初始化为保存代码运行的目录(即Assembly.GetExecutingAssembly()。CodeBase)。我想扩展这个类来初始化BinDirectory,以便在从我的应用程序安装程序运行时从安装程序上下文中保存“TargetDir”。我可以将BinDirectory改为简单的静态,但我不想,因为它会让我对我的应用程序中常见的类进行很多更改。有人可以提出一个优雅的解决这个问题的方法吗?关于C#静态只读成员
2
A
回答
3
这是AppConfigs是。在您的AppSettings部分中,添加一个名为BinDirectory
的新密钥。你可以重新写你的类如:
public static string BinDirectory
{
get
{
return ConfigurationManager.AppSettings["BinDirectory"];
}
}
最后,在安装过程中的最后一个步骤,您可以更改bin目录指向任何你想要的目录。所以现在这个值完全由安装程序上下文决定。
5
使其与刚刚“搞定”访问属性:
public static string BinDirectory
{
get { return _initialisedBinDirectory; }
}
然后在你的静态构造函数的代码,初始化私有变量,因为你需要。
编辑
延迟加载(如根据注释):
public static string BinDirectory
{
get
{
if (_initialisedBinDirectory == null)
// load the variable when needed
else
return _initialisedBinDirectory;
}
}
这样,你只加载当你需要它的变量,它的重复使用,只要你再次调用它。希望你不要将null
作为一个有效的值。
0
这听起来像你不愿意将静态只读字段更改为简单静态,因为这会迫使你更改类中所有其他静态只读字段的初始化。
如果这是正确的,不幸的是没有很多你可以做,但花时间做出改变。通过允许在运行时设置BinDirectory字段,您将从根本上改变字段的初始化顺序。你的代码需要适应。
我认为最简单的方法是转换为使用静态只读属性,它可以动态计算值。
例如:
public class Values {
public static string BinDir;
public static string OtherDir {
get { return Path.Combine(BinDir,@"Some\Other\Path"); }
}
}
+0
您可能需要将Path.Combine的结果“缓存”到字段中。将BinDir也更改为一个属性,并给它一个私有集合操作。 – Zyphrax 2010-01-26 14:42:28
相关问题
- 1. C++静态成员
- 2. 关于静态数据成员。
- 3. 访问静态成员静态成员
- 4. C++类的静态成员
- 5. C++:静态成员变量
- 6. C++:复制静态成员?
- 7. C#静态类 - 静态类不能有非静态成员
- 8. C# - 静态成员只能对静态数据进行操作吗?
- 9. 为什么静态类只能有静态成员?
- 10. F#静态成员
- 11. “静态”类成员
- 12. Java的静态成员和C++的静态成员之间的区别
- 13. 关于C结构成员
- 14. 关于非静态类和垃圾回收中的静态成员的问题
- 15. C#私有,静态和只读
- 16. C++ dllimport的静态数据成员
- 17. C#中的静态成员继承
- 18. C++中的静态成员数组
- 19. 静态成员变量初始化C++
- 20. C++静态数据成员初始化
- 21. C++改变从静态成员函数
- 22. C++类中的静态常量成员
- 23. '静态'的C++类成员函数?
- 24. 两个DLL中的静态成员C++
- 25. 类中的C++静态成员
- 26. C++(非内置/类)静态成员
- 27. 在C++中初始化静态成员
- 28. 静态成员在C++编程
- 29. 定义静态成员在C++
- 30. 静态成员和模板在C++
我想你错过了一些括号'()'或'get'块 – Codesleuth 2010-01-26 14:45:33
但是我可以在运行时更改AppSetting吗?如果是,那么这是我的解决方案。 – Ikaso 2010-01-26 14:49:20
这里最好的答案是,你可以在运行时改变appsettings。 – JonH 2010-01-26 14:53:25