.net 是否为非常量类型的属性设置DefaultValue?
我有一个Windows.Forms组件,它有一个返回Size结构的“mySize”属性。 我的意图是让这个属性根据组件的大小自动计算返回的mySize,除非mySize已明确设置,在这种情况下,返回mySize的设置值。 不幸的是,现在我正在将组件嵌入表单中,Windows表单设计器决定开始显式地为mySize属性生成和设置一个值,这让我非常恼火 所以我需要设置一个DefaultValue,这样设计师就可以离开我了 我已经阅读了有关System.ComponentModel.DefaultValue的答案,因此我知道我必须在构造函数中手动设置属性的值,但是我找到的答案和文档只涉及将DefaultValue设置为False,一个常量 Size结构不是常量,因此VB编译器非常紧张,告诉我不能将Size设置为Size类型属性的默认值,因为Size不是常量 这让我的大脑受伤了 我可能可以通过使用getMySize和setMySize方法而不是使用属性来解决这个问题,但是我想知道是否有任何方法可以为大小设置默认属性.net 是否为非常量类型的属性设置DefaultValue?,.net,properties,windows-forms-designer,.net,Properties,Windows Forms Designer,我有一个Windows.Forms组件,它有一个返回Size结构的“mySize”属性。 我的意图是让这个属性根据组件的大小自动计算返回的mySize,除非mySize已明确设置,在这种情况下,返回mySize的设置值。 不幸的是,现在我正在将组件嵌入表单中,Windows表单设计器决定开始显式地为mySize属性生成和设置一个值,这让我非常恼火 所以我需要设置一个DefaultValue,这样设计师就可以离开我了 我已经阅读了有关System.ComponentModel.DefaultVal
注意:我没有使用mySize作为某种疯狂的尝试来覆盖Size属性(它的DefaultValue为150x150,因此似乎可以为Size设置DefaultValue);mySize只是类所需的一些大小值。编写以下两种方法,而不是应用DefaultValue属性:
bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }
在ShouldSerializemySize中,如果值应序列化为代码,则返回true。在ResetmySize中,将属性重置为其默认值
组件设计器将通过反射自动选择这些方法
更多信息请点击此处:
我注意到,在的“社区内容”部分中,实际上给出了一个设置类型为Size的defaultValue的具体示例,建议使用上描述的defaultValue构造函数 不幸的是,尽管给出的示例是正确的,但在我看来,MSDN文档不会自然地引导任何人找到这个答案
我将把albahari的答案作为这个问题的答案(因为他的答案至少有一定的道理),为了完整起见,我把这个例子留在这里。作为旁白:XmlSerializer也将使用ShouldSerialize*,但只有在它是公共的情况下。大家好。旧帖子,但我有复杂类型的问题?请回答这个问题。