首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置类中的下播- Visual

设置类中的下播- Visual
EN

Stack Overflow用户
提问于 2014-07-06 03:24:31
回答 1查看 321关注 0票数 0

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

代码语言:javascript
复制
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase

在类中,这一行代码让我感到困惑:

代码语言:javascript
复制
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

我相信,这是一个降级的例子。我不清楚为什么这是必要的。为什么不直接创建一个Settings实例,因为它已经被定义为继承基础?

这里有一个更长的片段:

代码语言:javascript
复制
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...

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-06 06:16:18

这句话:

代码语言:javascript
复制
Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

等于说:

代码语言:javascript
复制
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方法将被声明为一个泛型,如下所示:

代码语言:javascript
复制
public static TSettings Synchronized<TSettings> (TSettings settingsBase) where TSettings: SettingsBase

但在c#中,这个类可能比泛型更老;)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24592441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档