問題是價值是否改變,你需要將它保存回註冊表?或者,註冊表中的值始終是正確的,從不更新?
一審:
私人支持字段:
private static HorizontalAlignment? _Alignment;
屬性:
public static HorizontalAlignment Alignment
{
get
{
if (_Alignment == null)
{
_Alignment = GetAlignment();
}
return _Alignment.Value;
}
set
{
if (_Alignment != value && SetAlignment(value))
{
_Alignment = value;
OnAlignmentChanged(new AlignmentChangedEventArgs(value));
}
}
}
「獲取」 的方法:
private static HorizontalAlignment GetAlignment()
{
HorizontalAlignment alignmentValue = DEFAULT_ALIGNMENT;
using (RegistryKey registryKey = Registry.LocalMachine.CreateSubKey(REGISTRYKEY))
{
if (registryKey != null)
{
string tempAlignment = registryKey.GetValue(ALIGNMENT_KEYNAME, string.Empty).ToString();
if (!string.IsNullOrEmpty(tempAlignment))
{
try
{
alignmentValue = (HorizontalAlignment)Enum.Parse(typeof(HorizontalAlignment), tempAlignment, false);
}
catch (Exception exception)
{
alignmentValue = DEFAULT_ALIGNMENT;
Logging.LogException(exception);
}
}
}
}
return alignmentValue;
}
的「設置「方法:
private static bool SetAlignment(HorizontalAlignment value)
{
bool flag = true;
using (RegistryKey registryKey = Registry.LocalMachine.CreateSubKey(REGISTRYKEY))
{
if (registryKey != null)
{
try
{
registryKey.SetValue(ALIGNMENT_KEYNAME, value.ToString(), RegistryValueKind.String);
}
catch (Exception exception)
{
Logging.LogException(exception);
flag = false;
}
}
}
return flag;
}
如果您的問題是「是否需要實現Set訪問器?」那麼答案是否定的。以下內容也是有效的。
public int MyInt { get { return 1; } }
public int MyInt { get; protected set; }
您確定此代碼是性能瓶頸嗎?如果沒有,*不要嘗試「優化」*。 – 2009-12-14 06:19:09
不,但我只是想知道屬性的用法,雖然它在這裏是強制性的,任何方式的功能工作都很好。我只是想知道屬性的用法(SET訪問器是必需的嗎?) 和decalration我在做什麼構造函數 – peter 2009-12-14 06:24:06
您應該在使用它之後處置該regkey,或將其放入使用(RegistryKey regkey = ...){...}語句中。 – treaschf 2009-12-14 06:32:21