簡體   English   中英

在設置類中向下轉換-Visual Studio

[英]Downcasting in Settings Class - Visual Studio

我正在使用Visual Studio v12.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...

}

該行:

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#中的泛型要老;)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM