C# 设置类中的向下广播-Visual Studio

C# 设置类中的向下广播-Visual Studio,c#,C#,我正在使用Visual Studio v12.0并查看解决方案资源管理器中的Settings.Designer.cs文件。在Properties命名空间中,设置派生类是从ApplicationSettingsBase类创建的,如下所示: internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 在课堂上,这一行代码让我感到困惑: private static Set

我正在使用Visual Studio v12.0并查看解决方案资源管理器中的Settings.Designer.cs文件。在Properties命名空间中,设置派生类是从ApplicationSettingsBase类创建的,如下所示:

internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
在课堂上,这一行代码让我感到困惑:

private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new 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...
}行:

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
类型。并被调用以使设置对象线程安全。否则,您必须:a)将
defaultInstance
定义为
SettingsBase
或b)不调用
ApplicationSettingsBase.Synchronized
和风险线程问题

我猜现在的方法
ApplicationSettingsBase.Synchronized
将被声明为一种通用方法,如下所示:

public static TSettings Synchronized<TSettings> (TSettings settingsBase) where TSettings: SettingsBase
public static TSettings Synchronized(TSettings settings base)其中TSettings:setings base

但是这个类可能比c#)中的泛型更古老

非常感谢,这很好。顺便说一句,如果这里使用的铸造符号是文物?我似乎只能找到使用“as”关键字的示例。@TimBostwick不太可能,这些运算符(显式强制转换和“as”)的行为不同: