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