3

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

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

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

4

2 回答 2

8

为什么它使用方括号从基础访问值“服务器”?

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

因此它公开了一个字符串索引器:this[string]它允许您访问从配置中读取的值。

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

于 2015-09-04T10:50:51.223 回答
3

对@CodeCaster 的回答稍加补充。
使用 C#6,您可以让您的生活更轻松:

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

特别是,如果这个代码块将被转换成代码片段。

于 2015-09-04T11:00:10.140 回答