如何使用struct属性创建默认值?
我想知道如何将[DefaultValue]属性应用于struct属性。 您可以注意到Microsoft使用Form的大小和许多其他属性来完成它。 他们的值类型是Size,Point等。我想用自定义结构做同样的事情。
[DefaultValue(typeof(Point), "0, 0")]
就是一个例子。 使用字符串初始化值是必要的恶魔,您可以在属性构造函数中使用的类型非常有限。 只有简单的值类型,字符串,类型和它们的一维数组。
要使其工作,您必须为您的结构编写TypeConverter:
[TypeConverter(typeof(PointConverter))] [// etc..] public struct Point { // etc... }
有关MSDN库中类型转换器的文档并不是很好。 使用.NET类型转换器,您可以使用参考源查看源代码或使用Reflector进行反向工程,这是一个很好的起点,可以让您自己开始工作。 注意文化顺便说一句。
[DefaultValue]
属性仅适用于设计器/代码生成器/ etc。 你不能将它用于structs
。 structs
中的值都是值类型,并且不支持默认构造函数。 创建struct
对象时,它的所有属性/字段都设置为其默认值。 您无法更改此行为。
MSDN参考:
http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx
备注:
您可以使用任何值创建DefaultValueAttribute。 成员的默认值通常是其初始值。 可视化设计器可以使用默认值来重置成员的值。 代码生成器也可以使用默认值来确定是否应该为成员生成代码。
注意:
DefaultValueAttribute不会导致使用属性的值自动初始化成员。 您必须在代码中设置初始值。
这取决于属性类型 – 您只能在属性中使用常量值,因此它必须是基本类型,字符串,枚举类型或在const
上下文中有效的任何其他类型。
因此,如果您的属性是字符串,您只需执行以下操作:
[DefaultValue("foo")] public string SomeProperty { get; private set; }
请注意,这不会影响struct的默认构造函数的行为,它仍会将SomeProperty
初始化为null; 此属性仅影响Visual Studio的属性窗格的行为。