我使用VisualStudiov12.0并查看解决方案资源管理器中的Settings.Designer.cs文件。在Properties命名空间中,Settings派生类是从ApplicationSettingsBase类创建的,如下所示:
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase在类中,这一行代码让我感到困惑:
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));我相信,这是一个降级的例子。我不清楚为什么这是必要的。为什么不直接创建一个Settings实例,因为它已经被定义为继承基础?
这里有一个更长的片段:
namespace ConfigMgrTest.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
...rest of the namespace...}
发布于 2014-07-06 06:16:18
这句话:
Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));等于说:
Settings s1 = new Settings();
SettingsBase synchronizedBaseSettings = global::System.Configuration.ApplicationSettingsBase.Synchronized(s1);
Settings settings = (Settings)synchronizedBaseSettings;所以转换是必需的,因为ApplicationSettingsBase.Synchronized返回SettingsBase类型。并调用ApplicationSettingsBase.Synchronized使设置对象线程安全。否则,您必须:( a)将defaultInstance定义为SettingsBase或b)不要调用ApplicationSettingsBase.Synchronized并冒线程问题的风险。
我想现在ApplicationSettingsBase.Synchronized方法将被声明为一个泛型,如下所示:
public static TSettings Synchronized<TSettings> (TSettings settingsBase) where TSettings: SettingsBase但在c#中,这个类可能比泛型更老;)。
https://stackoverflow.com/questions/24592441
复制相似问题