e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
179 lines
6.7 KiB
C#
179 lines
6.7 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="DefaultValueAttribute.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.ComponentModel {
|
|
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.Globalization;
|
|
using System.Runtime.InteropServices;
|
|
#if !SILVERLIGHT
|
|
using System.Runtime.Serialization.Formatters;
|
|
#endif
|
|
using System.Security.Permissions;
|
|
|
|
/// <devdoc>
|
|
/// <para>Specifies the default value for a property.</para>
|
|
/// </devdoc>
|
|
#if !SILVERLIGHT
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments")]
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1813:AvoidUnsealedAttributes")]
|
|
#endif
|
|
[AttributeUsage(AttributeTargets.All)]
|
|
public class DefaultValueAttribute : Attribute {
|
|
/// <devdoc>
|
|
/// This is the default value.
|
|
/// </devdoc>
|
|
private object value;
|
|
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class, converting the
|
|
/// specified value to the
|
|
/// specified type, and using the U.S. English culture as the
|
|
/// translation
|
|
/// context.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(Type type, string value) {
|
|
|
|
// The try/catch here is because attributes should never throw exceptions. We would fail to
|
|
// load an otherwise normal class.
|
|
try {
|
|
#if !SILVERLIGHT
|
|
this.value = TypeDescriptor.GetConverter(type).ConvertFromInvariantString(value);
|
|
#else
|
|
if (type.IsEnum) {
|
|
this.value = Enum.Parse(type, value, true);
|
|
} else if (type == typeof(TimeSpan)) {
|
|
this.value = TimeSpan.Parse(value);
|
|
} else if (type.Module == typeof(string).Module) {
|
|
this.value = Convert.ChangeType(value, type, CultureInfo.InvariantCulture);
|
|
}
|
|
#endif
|
|
}
|
|
catch {
|
|
#if !SILVERLIGHT
|
|
Debug.Fail("Default value attribute of type " + type.FullName + " threw converting from the string '" + value + "'.");
|
|
#else
|
|
Debug.WriteLine("Default value attribute of type " + type.FullName + " threw converting from the string '" + value + "'.");
|
|
#endif
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using a Unicode
|
|
/// character.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(char value) {
|
|
this.value = value;
|
|
}
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using an 8-bit unsigned
|
|
/// integer.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(byte value) {
|
|
this.value = value;
|
|
}
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using a 16-bit signed
|
|
/// integer.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(short value) {
|
|
this.value = value;
|
|
}
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using a 32-bit signed
|
|
/// integer.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(int value) {
|
|
this.value = value;
|
|
}
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using a 64-bit signed
|
|
/// integer.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(long value) {
|
|
this.value = value;
|
|
}
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using a
|
|
/// single-precision floating point
|
|
/// number.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(float value) {
|
|
this.value = value;
|
|
}
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using a
|
|
/// double-precision floating point
|
|
/// number.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(double value) {
|
|
this.value = value;
|
|
}
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using a <see cref='System.Boolean'/>
|
|
/// value.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(bool value) {
|
|
this.value = value;
|
|
}
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/> class using a <see cref='System.String'/>.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(string value) {
|
|
this.value = value;
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.ComponentModel.DefaultValueAttribute'/>
|
|
/// class.</para>
|
|
/// </devdoc>
|
|
public DefaultValueAttribute(object value) {
|
|
this.value = value;
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// <para>
|
|
/// Gets the default value of the property this
|
|
/// attribute is
|
|
/// bound to.
|
|
/// </para>
|
|
/// </devdoc>
|
|
public virtual object Value {
|
|
get {
|
|
return value;
|
|
}
|
|
}
|
|
|
|
public override bool Equals(object obj) {
|
|
if (obj == this) {
|
|
return true;
|
|
}
|
|
|
|
DefaultValueAttribute other = obj as DefaultValueAttribute;
|
|
|
|
if (other != null) {
|
|
if (Value != null) {
|
|
return Value.Equals(other.Value);
|
|
}
|
|
else {
|
|
return (other.Value == null);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public override int GetHashCode() {
|
|
return base.GetHashCode();
|
|
}
|
|
|
|
protected void SetValue(object value) {
|
|
this.value = value;
|
|
}
|
|
}
|
|
}
|