1

最近、MSDNでこのチュートリアルを取り上げました。これにより、アプリのユーザーが設定を変更して保存できるようになります。頭をかいた後、1つを除いてすべて理解できたと思います。元のコードの最も関連性の高い部分から始めましょう。すべてがAppSettingsと呼ばれるクラスにあります。これをテストするために使用しているプロパティはson1です。私が理解しているのはこれです:

コードの最後に、次のように表示されます。

 // Property to get and set son1 Key.
    public int son1
    {
        get
        {
            return GetValueOrDefault<int>(son1KeyName, son1Default);
        }
        set
        {
            if (AddOrUpdateValue(son1KeyName, value))
            {
                Save();
            }
        }
    }

プロパティを設定すれば簡単です。このメソッドを呼び出すだけです。

public bool AddOrUpdateValue(string Key, Object value)
    {
        bool valueChanged = false;
 // If the key exists
        if (settings.Contains(Key))
        {
            // If the value has changed
            if (settings[Key] != value)
            {
                // Store the new value
                settings[Key] = value;
                valueChanged = true;
            }
        }
        // Otherwise create the key.
        else
        {
            settings.Add(Key, value);
            valueChanged = true;
        }
        return valueChanged;
    }

私はそれをしなければなりません、そして私は終わりました:

AppSettings param = new AppSettings();
        param.son1 = 1;

これで、GETの構文は私にはもっと奇妙に思えます。プロセスは同じで、メソッドはプロパティによって使用されます。getプロパティは私の投稿の上部にリストされています。ご覧のとおり、このメソッドを呼び出します。

public T GetValueOrDefault<T>(string Key, T defaultValue)
    {
        T value;

        // If the key exists, retrieve the value.
        if (settings.Contains(Key))
        {
            value = (T)settings[Key];
        }
        // Otherwise, use the default value.
        else
        {
            value = defaultValue;
        }
        return value;
    }

<と>の間に書かれている「T」に邪魔されています。理解できれば、プロパティをデフォルト値に設定できるはずです。これは、プログラムの最初に適切に実行します。どんなヒントでも大歓迎です。ありがとうございました。

4

3 に答える 3

6

<と>の間に書かれている「T」に邪魔されています。

これは、それがジェネリックメソッドであることを示しています。

基本的に、ジェネリックについて読まないと理解できません。ジェネリックは、スタックオーバーフローの回答で十分にカバーするには大きすぎるトピックです。MSDNガイドのリンクをたどってください:)

非常に簡単なバージョンは、メソッドが値だけでなくタイプによってもパラメーター化されることを意味します。ジェネリックスはメソッドだけでなく型にも適用できるため、aList<string>は「文字列のリスト」であり、aList<int>は「整数のリスト」です。一般的なメソッドは似ていますが、理解するのが少し難しいです-ここでは「指定された文字列キーに基づいてGetValueOrDefaultタイプの値を返します-またはキーが設定に存在しない場合は指定されたデフォルト値(これもタイプ)を返します」と説明できます。」TT

したがって、デフォルトで設定からGetValueOrDefault<string>(key, "foo")aを返し、デフォルトで。に設定からを返します。string"foo"GetValueOrDefault<int>(key, 10)int10

それは30秒のウォークスルーです-学ぶべきことがもっとたくさんあります:)

于 2013-02-20T17:08:23.210 に答える
0

これはジェネリックと呼ばれます。

Genericsの顕著な例の1つは、ですList<T>。これは、任意の型を受け入れ、その型のオブジェクトのコンテナーとして機能します。

List<int> intList; // a list of int
List<string> stringList; // a list of strings
于 2013-02-20T17:09:19.907 に答える
0

ジェネリックスの構文です。

これは複雑なテーマですが、一言で言えば、基本的には、メソッドを複数のタイプで使用できることを意味します。簡単にするために、Tを任意のタイプに置き換えることができます。複数の関数を書く代わりに:

public string GetValueOrDefault(string Key, string defaultValue)
public int GetValueOrDefault(string Key, int defaultValue)

あなたは1つだけ書く:

T GetValueOrDefault<T>(string Key, T defaultValue)
于 2013-02-20T17:13:15.407 に答える