質問

いくつかのブール型プロパティを持つUserControlがあります。 .aspxページで明示的に設定されていない場合はデフォルトでtrueに設定するか、少なくともデフォルトを設定する方法がない場合は少なくとも強制的に宣言するようにします。多くのコントロールには、アプリを実行しようとしたときにアプリを中断するプロパティが必要であり、宣言されていないため、これを行う方法があることはわかっています。

これを行うにはどうすればよいですか

例:

<je:myControl runat="server" id="myControl" showBox="False">

システムを中断するか、デフォルトを「true」に設定します。 showBoxがこの宣言から除外されている場合。

ありがとう!

役に立ちましたか?

解決

そのようなデフォルト値でプロパティを定義します:

private bool _ShowBox = false;
public bool ShowBox
{
    set { _ShowBox = value; }
}

またはコントロールのコンストラクターで、デフォルト値を設定します:

public MyControl()
{
    _ShowBox = false;
}

または割り当てられていない場合は例外をスローします:

private bool _ShowBox = false;
public bool ShowBox
{
    set { _ShowBox = value; }
    get { return _ShowBox; }
}

他のヒント

遅れていることはわかっていますが、それについて言及したいだけです

[DefaultValue(false)]

属性をfalseに設定しません。参照: http://msdn.microsoft.com/en-us /library/system.componentmodel.defaultvalueattribute.aspx 。それは言う:

&quot; DefaultValueAttributeは、メンバーを属性の値で自動的に初期化しません。コードに初期値を設定する必要があります。&quot;

この属性は、Visual Studio Designerでデフォルト値と見なされるものを示すためだけのものです。コントロールを使用しているユーザーがこの値を変更すると、この値がデフォルトではないことを示すために太字が表示されます。

変数を宣言するときに、目的のデフォルト値を設定するだけです:

class myControl
{
    private bool _showBox = true;

    [PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)]
    public bool showBox
    {
        get { return _showBox; }
        set { _showBox = value; }
    }
}

オプションで、デザイナーのDefaultValueAttributeを追加できます。

ReSharperは、次のように、自動プロパティを使用し、コンストラクタでデフォルト値を設定することを推奨しています。

public class MyControl
{
  public MyControl()
  {
    ShowBox = true;
  }

  public bool ShowBox { get; set; }
}  
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top