我的代码中是否存在任何逻辑问题,需要优化什么?
在这段代码中,我从注册表中获取值。我在这里创建了一个属性。我在不同的文件中获取该属性。我们在这里需要set
访问者吗?该
值已在注册表中修复。
public class Agent
{
public string version
{
get { return m_version; }
set { m_version = value; }
}
private string m_version = null;
// constructor
public Agent()
{
string keySpoPath = SpecialRegistry.SpecialAgentRoot;
RegistryKey regkey = Registry.LocalMachine.OpenSubKey(keySpoPath);
m_version =
(string)regkey.GetValue(SpecialRegistry.regValue_CurrentVersion);
}
}
答案 0 :(得分:0)
除非您希望从外部类更改值并稍后更新注册表否,否则您不需要设置器。
答案 1 :(得分:0)
没有。如果您不希望从其他文件更新该值,只需提供get访问器。
答案 2 :(得分:0)
问题是价值是否会发生变化,您是否需要将其保存回注册表?或者注册表中的值是否始终正确且永不更新?
首先:
私人支持字段:
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; }
答案 3 :(得分:0)
你可以拔出keySpoPath并使其成为静态或只读,因为它似乎对每次代理调用都是不变的。对于这个问题,regkey也可以被拔出并完成一次。如果它正在改变,我会保留到位,否则它也可以静态完成。
答案 4 :(得分:0)
使用后配置RegistryKey。 除非您需要,否则不要缓存。 不要害怕硬编码注册表项名称 - 它们很可能只在一个地方使用。
public class Agent
{
public string Version
{
get
{
using (var regkey = Registry.LocalMachine.OpenSubKey(SpecialRegistry.SpecialAgentRoot))
return (string)regkey.GetValue("CurrentVersion");
}
}
}