1

カスタム クラスを実装し、PropertyDescriptor.ResetValue メソッドを呼び出してデフォルト値を設定しようとしました。インターネットでいくつかの調査を行うと、msdn でこの方法、その使用法、および使用方法に関するリンクを見ました。

http://msdn.microsoft.com/en-us/library/system.componentmodel.propertydescriptor.resetvalue.aspx

このリンクによると、msdn ドキュメントには次のように記載されています。

このメソッドは、プロパティをリセットする値を次の優先順位で決定します。 1- このプロパティにはシャドウ プロパティがあります。2- このプロパティには DefaultValueAttribute があります。3-実装した「ResetMyProperty」メソッドがあります。「MyProperty」は、渡すプロパティの名前です。

2 番目の方法論は私のニーズに対応していません。一方、1 番目と 3 番目の項目の使用サンプルは十分ではありません。

特に3番目のものについて説明していただけますか?

4

2 に答える 2

1

最初のオプションについてはわかりませんが (基本クラスで 1 つのプロパティを宣言し、派生クラスで「新しい」プロパティを宣言することに関係していると思われます)、3 番目のオプションは非常に単純に思えます。

public class Foo
{
    public string Name { get; set; }

    public Foo()
    {
        ResetName();
    }

    public void ResetName()
    {
        Name = "Some default value";
    }
}

ドキュメントには、プロパティに対して を呼び出すと、コンポーネントのResetValueメソッドが呼び出されると書かれています。PropertyDescriptorNameResetName

私は実際にこれを試したことはありませんが、それは私の解釈です。

于 2013-06-25T08:07:41.497 に答える
0

(2) DefaultValueAttribute を次のように取得できます。

public class MyClass
{
[DefaultValue("my default value")]
public string MyVar { get; set; }

foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(typeof(MyClass)))
    string defaultValue = descriptor.Attributes.OfType<DefaultValueAttribute>().First().Value.ToString();
于 2014-06-01T09:24:21.167 に答える