非定数型のプロパティにDefaultValueを設定していますか?
-
03-07-2019 - |
質問
「mySize」を持つWindows.Formsコンポーネントがあります。 Size構造体を返すプロパティ。 mySizeが明示的に設定されていない限り、返されたmySizeをコンポーネントのサイズに基づいて自動的に計算することを意図していました。その場合、mySizeの設定値を返します。 残念ながら、コンポーネントをフォームに埋め込むので、Windows FormsデザイナはmySizeプロパティの値の明示的な生成と設定を開始することにしました。
したがって、Designerがなくなり、私を放置するために、DefaultValueを設定する必要があります。
System.ComponentModel.DefaultValueを扱う回答を読んだので、コンストラクターでプロパティの値を手動で設定する必要があることは知っていますが、見つかった回答とドキュメントはDefaultValueの設定のみを扱っていますFalse、定数。
Size構造体は定数ではないため、VBコンパイラはおかしくなり、Sizesは定数ではないため、SizeをType SizeのPropertyのDefaultValueとして設定できないと言っています。
これは私の脳を傷つけます。
おそらく、プロパティを使用する代わりにgetMySizeおよびsetMySizeメソッドを作成することで問題を回避できますが、実際にSizeのデフォルトプロパティを設定する方法があるかどうかを知りたいです。
NB:Sizeプロパティ(150x150のDefaultValueがあるため、SOMETHINGはSizesのDefaultValuesを設定できるようです)をオーバーライドするための何らかの混乱した試みとしてmySizeを使用していません。 mySizeは、クラスに必要なサイズの値です。
解決
DefaultValue属性を適用する代わりに、次の2つのメソッドを記述します。
bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }
ShouldSerializemySizeで、値をコードにシリアル化する必要がある場合はtrueを返します。 ResetmySizeで、プロパティをデフォルト値にリセットします。
コンポーネント設計者は、リフレクションを介してこれらのメソッドを自動的に選択します。
詳細はこちら: http://msdn.microsoft.com/en-us/ library / 53b8022e(VS.71).aspx
他のヒント
実際には、 DefaultValueのMSDNページ。このページ。
残念ながら、そこに示されている例は正しいですが、動作するという点で、MSDNのドキュメントでは誰もこの答えに自然に導かないようです。
アルバハリの答えをこの質問に対する答えとして設定し(彼の答えは少なくとも何らかの意味があるので)、完全を期すためにここにこの例を残します。