汽車物業?不,我不會在單身人士身上使用二傳手,是的,我做過。我想你想要更多的控制權,而不是汽車財產會給你。
...建設性的反饋是歡迎在這裏,請。這感覺像一個勇敢的(或愚蠢的)在這個尊敬的公司的舉動...
我的情況,一個WPF應用程序,有一個當前項目比可以加載和保存。目前的項目設置上被廣泛使用的應用程序...
在WPF綁定
- 的UI,使用戶可以更改設置,因此
INotifyPropertyChanged
接口。
- 我也使用Fody.PropertyChanged但不做靜態屬性更改,因此
NotifyStaticPropertyChanged
。
INotifyPropertyChanged
與單身人士的屬性上WPF綁定工作正常。
Settings
的一個實例是使用JSON.NET [de]序列化的,因此單例中的屬性爲[JsonIgnore]
。我在將它加載到單例或將其保存到磁盤之前進行驗證。
- 記錄器是Serilog。你記錄的東西,對吧?
- 單身人士是
public
與public
獲得者,因爲WPF綁定僅適用於公共屬性。 internal
setter不會影響它。 Settings
的所有屬性公開爲WPF綁定。
我在代碼中留下了所有「噪音」,因爲有些人可能會覺得它很有用。
class Settings : INotifyPropertyChanged
{
private static Settings _currentSettings = new Settings();
/// <summary> The one and only Current Settings that is the current Project. </summary>
[JsonIgnore] // so it isn't serialized by JSON.NET
public static Settings CurrentSettings // http://csharpindepth.com/Articles/General/Singleton.aspx
{
get { return _currentSettings; }
// setter is to load new settings into the current settings (using JSON.NET). Hey, it works. Probably not thread-safe.
internal set
{
Log.Verbose("CurrentSettings was reset. Project Name: {projectName}", value.ProjectName);
_currentSettings = value;
_currentSettings.IsChanged = false;
NotifyStaticPropertyChanged("CurrentSettings");
}
}
// http://10rem.net/blog/2011/11/29/wpf-45-binding-and-change-notification-for-static-properties
/// <summary> Fires when the Curent CurrentTvCadSettings is loaded with new settings
/// Event queue for all listeners interested in StaticPropertyChanged events. </summary>
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged = delegate { };
private static void NotifyStaticPropertyChanged(string propertyName)
{
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
}
// various instance properties including ....
public string ProjectName {get; set;}
[JsonIgnore]
public bool IsChanged { get; set; }
}
使用的單設爲一個新加載的項目,settings
簡直是
Settings settings = new Settings();
// load, save, deserialize, set properties, go nuts
Settings.CurrentSettings = settings;
setter方法可能不是線程安全的,但我只能從UI線程設置在一個位置,我不怕。你可以讓它線程安全,因爲http://csharpindepth.com/Articles/General/Singleton.aspx
我意識到OP沒有問WPF,但我認爲它是相關的,以顯示爲什麼你可能想設置一個單身人士。我做到了,因爲這是最簡單的解決方案。
我強烈反對。發明了自動屬性以使代碼更加簡潔,這使得代碼更具可讀性。恕我直言,對於其他人來說,讓自己的設計搞砸更難一些。 – 2010-01-22 13:17:16
@Philippe:自動屬性是爲了使代碼更簡潔而發明的,其中替換代碼等同於原始*。這裏沒有這樣的等價關係:即使它有一個私有的setter,你用一個只讀屬性替換一個只讀屬性。這可能看起來微不足道,但我更喜歡我的代碼來表達我的意圖 - 我的意圖是隻能將該值設置一次。自動實現的屬性表達了不同的意圖。 – 2010-01-22 13:24:55
對於二傳手的「意圖」,你有一點意見,但最終對於這個階級的消費者來說,沒有任何區別。具有私人支付者的自動特性非常類似於具有私人支持字段的只讀特性。當然,它會編譯成不同的代碼,但從類的消費者的角度來看,它本質上是相同的。現在我必須自己拍,因爲我從來沒有喜歡過自動屬性,現在我正在捍衛它的使用(但這是我猜想的另一個問題的主題) – 2010-01-22 13:41:23