Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否为非常量类型的属性设置DefaultValue?_.net_Properties_Windows Forms Designer - Fatal编程技术网

.net 是否为非常量类型的属性设置DefaultValue?

.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

我有一个Windows.Forms组件,它有一个返回Size结构的“mySize”属性。 我的意图是让这个属性根据组件的大小自动计算返回的mySize,除非mySize已明确设置,在这种情况下,返回mySize的设置值。 不幸的是,现在我正在将组件嵌入表单中,Windows表单设计器决定开始显式地为mySize属性生成和设置一个值,这让我非常恼火

所以我需要设置一个DefaultValue,这样设计师就可以离开我了

我已经阅读了有关System.ComponentModel.DefaultValue的答案,因此我知道我必须在构造函数中手动设置属性的值,但是我找到的答案和文档只涉及将DefaultValue设置为False,一个常量

Size结构不是常量,因此VB编译器非常紧张,告诉我不能将Size设置为Size类型属性的默认值,因为Size不是常量

这让我的大脑受伤了

我可能可以通过使用getMySize和setMySize方法而不是使用属性来解决这个问题,但是我想知道是否有任何方法可以为大小设置默认属性


注意:我没有使用mySize作为某种疯狂的尝试来覆盖Size属性(它的DefaultValue为150x150,因此似乎可以为Size设置DefaultValue);mySize只是类所需的一些大小值。

编写以下两种方法,而不是应用DefaultValue属性:

bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }
在ShouldSerializemySize中,如果值应序列化为代码,则返回true。在ResetmySize中,将属性重置为其默认值

组件设计器将通过反射自动选择这些方法

更多信息请点击此处:

我注意到,在的“社区内容”部分中,实际上给出了一个设置类型为Size的defaultValue的具体示例,建议使用上描述的defaultValue构造函数

不幸的是,尽管给出的示例是正确的,但在我看来,MSDN文档不会自然地引导任何人找到这个答案


我将把albahari的答案作为这个问题的答案(因为他的答案至少有一定的道理),为了完整起见,我把这个例子留在这里。

作为旁白:XmlSerializer也将使用ShouldSerialize*,但只有在它是公共的情况下。大家好。旧帖子,但我有复杂类型的问题?请回答这个问题。