• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#のプロパティ設定のコードについて)

C#のプロパティ設定のコードについて

このQ&Aのポイント
  • C#のプロパティ設定のコードについて質問します。
  • C#でユーザーコントロールを作成していますが、基底クラスのプロパティを使用できないようにする方法について教えてください。
  • また、Form.Designer.csに自動生成されるプロパティの値を設定するコードを避けたい場合はどうすればよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

例えばTextBoxのMaxLengthだった時 取得は可能だが、設定は許可しない例です。 【コンポーネントの実装】 class Class1 : TextBox { [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public new int MaxLength { get { return 0; } protected set { } } private int _yyy; public int YYY { get { return this._yyy; } set { this._yyy = value; base.MaxLength = this._yyy; } } } 【利用時】 class11.MaxLength = 1; エラーメッセージ set アクセサーにアクセスできないため、プロパティまたはインデクサー 'WindowsFormsApplication1.Class1.MaxLength' はこのコンテキストでは使用できません。 EditorBrowsable(EditorBrowsableState.Never) 外部ソリューションで参照された際に、コード入力中に表示されるインテリセンスの候補として出現しなくなります。 勘違いしてはならないのが、同一ソリューション内の他プロジェクトでは効きません。 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] コンポーネントを設置した際、Designerファイルで自動生成されるコードとして除外します。 これを設定することで、Designerファイル上にプロパティの設定コードは自動生成されません。 上記例だと、結果的に以下の動作になります。  ・Designerファイルで制御文が入ってこない。  ・インテリセンスに表示されてこない。  ・直接入力されたとしても、値を設定することはできず、無意味?な値の取得のみ行える。   (無意味かどうかは実装に応じて・・・) Obsolete("使用不可", true)は、上記に加えてお好きにどうぞ、という感じです。 Obsolete()はメッセージが適切かどうか微妙では? 操作不能としたいという要望では、上記の方法論の方が適切かもしれません。

kastihia
質問者

お礼

早速の回答、ありがとうございました。 試したところ、うまく動作しました。

すると、全ての回答が全文表示されます。

関連するQ&A