为什么ConfigurationSection需要用字符串查找?

时间:2015-09-04 10:46:58

标签: c# .net configurationsection

我在网上找到的ConfigurationSection示例(for example)都有如下代码:

public class ConnectionSection  : ConfigurationSection
{
    [ConfigurationProperty("Servers")]
    public ServerAppearanceCollection ServerElement
    {
        get { return ((ServerAppearanceCollection)(base["Servers"])); }
        set { base["Servers"] = value; }
    }
}

为什么使用方括号从基座访问值“Servers”?是从xml创建此对象时使用的setter,还是用于覆盖xml文件中的值的setter?如果是这样,为什么要在此属性上设置属性?

2 个答案:

答案 0 :(得分:8)

  

为什么使用方括号从基座访问值“Servers”?

因为基类ConfigurationSection不知道它的继承者将要实现什么属性。

因此它公开a string indexer: this[string],允许您访问从配置中读取的值。

这是一项设计决定。 .NET团队也可以选择使用反射来获取和设置继承者的属性,但决定不这样做。 (当然,配置部分中有很多反映,但直到public ServerAppearanceCollection ServerElement { get; set; }起作用为止)。

答案 1 :(得分:3)

@ CodeCaster答案的一点点补充。
使用C#6,您可以让您的生活更轻松:

class MyConfigSection : ConfigurationSection
{
    [ConfigurationProperty(nameof(SomeProperty))]
    public int SomeProperty
    {
        get { return ((int)(base[nameof(SomeProperty)])); }
        set { base[nameof(SomeProperty)] = value; }
    }
}

特别是,如果此代码块将转换为代码段。