我有以下情况。在我的应用程序中有一些非常普通的类,它包含一个名为“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. C#:静态成员VS实例成员
- 4. 访问静态成员静态成员
- 5. C++:静态成员变量
- 6. C++静态成员变量
- 7. C++类的静态成员
- 8. C++类的静态成员
- 9. C++:复制静态成员?
- 10. 静态成员
- 11. 如何设置静态类的私有静态只读数据成员?
- 12. C#静态类 - 静态类不能有非静态成员
- 13. 只有公共静态成员
- 14. C# - 静态成员只能对静态数据进行操作吗?
- 15. 为什么静态类只能有静态成员?
- 16. SSRS详细成员只能包含静态内部成员。
- 17. 问题有关静态成员变量
- 18. 静态类成员
- 19. F#静态成员
- 20. 静态javascript成员
- 21. 关于C结构成员
- 22. 显式访问静态成员变量在静态成员方法 - 在C++
- 23. Java的静态成员和C++的静态成员之间的区别
- 24. 关于非静态类和垃圾回收中的静态成员的问题
- 25. 静态::关于私人会员
- 26. 匿名联盟只能有非静态数据成员GCC C++
- 27. 与静态变量相关的静态成员函数
- 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