如何使用struct属性创建默认值?

时间:2010-12-31 21:13:39

标签: c# struct

我想知道如何将[DefaultValue]属性应用于struct属性。您可以注意到Microsoft使用Form的大小和许多其他属性来完成它。他们的值类型是Size,Point等。我想用我的自定义结构做同样的事情。

3 个答案:

答案 0 :(得分:10)

[DefaultValue(typeof(Point), "0, 0")]

将是一个例子。使用字符串初始化值是必要的恶,可以在属性构造函数中使用的类型非常受限。只有简单的值类型,字符串,类型和它们的一维数组。

要使这项工作,你必须为你的结构写一个TypeConverter:

[TypeConverter(typeof(PointConverter))]
[// etc..]
public struct Point
{
   // etc...
}

MSDN库中类型转换器的文档不是很好。使用.NET类型转换器,您可以使用参考源查看源代码或使用Reflector进行反向工程,这是一个很好的起点,可以让您自己开始工作。注意文化btw。

答案 1 :(得分:5)

[DefaultValue]属性仅适用于设计人员/代码生成器/ etc。您无法将其用于structsstructs中的所有值都是值类型,并且不支持默认构造函数。创建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属性窗格的行为。