[英]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.