3

ConfigurationSectionオンラインで見つけた例 (たとえば) にはすべて、次のようなコードがあります。

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

角括弧を使用してベースから値「サーバー」にアクセスするのはなぜですか? xml からこのオブジェクトを作成するときに使用されるセッターですか、それとも 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 に答える