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