我的代码中是否存在任何逻辑问题,需要优化哪些内容?

时间:2009-12-14 06:17:14

标签: c# .net

我的代码中是否存在任何逻辑问题,需要优化什么?

在这段代码中,我从注册表中获取值。我在这里创建了一个属性。我在不同的文件中获取该属性。我们在这里需要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);
    }
}

5 个答案:

答案 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");
        }
    }
}