1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
//------------------------------------------------------------------------------
// <copyright file="ControlValuePropertyAttribute.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
namespace System.Web.UI {
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Security.Permissions;
using System.Web.Util;
/// <devdoc>
/// Specifies the default value property for a control.
/// </devdoc>
[AttributeUsage(AttributeTargets.Class)]
public sealed class ControlValuePropertyAttribute : Attribute {
private readonly string _name;
private readonly object _defaultValue;
/// <devdoc>
/// Initializes a new instance of the <see cref='System.Web.UI.ControlValuePropertyAttribute'/> class.
/// </devdoc>
public ControlValuePropertyAttribute(string name) {
_name = name;
}
/// <devdoc>
/// Initializes a new instance of the class, using the specified value as the default value.
/// </devdoc>
public ControlValuePropertyAttribute(string name, object defaultValue) {
_name = name;
_defaultValue = defaultValue;
}
/// <devdoc>
/// Initializes a new instance of the class, converting the specified value to the
/// specified type.
/// </devdoc>
public ControlValuePropertyAttribute(string name, Type type, string defaultValue) {
_name = name;
// The try/catch here is because attributes should never throw exceptions. We would fail to
// load an otherwise normal class.
try {
_defaultValue = TypeDescriptor.GetConverter(type).ConvertFromInvariantString(defaultValue);
}
catch {
System.Diagnostics.Debug.Fail("ControlValuePropertyAttribute: Default value of type " + type.FullName + " threw converting from the string '" + defaultValue + "'.");
}
}
/// <devdoc>
/// Gets the name of the default value property for the control this attribute is bound to.
/// </devdoc>
public string Name {
get {
return _name;
}
}
/// <devdoc>
/// Gets the value of the default value property for the control this attribute is bound to.
/// </devdoc>
public object DefaultValue {
get {
return _defaultValue;
}
}
public override bool Equals(object obj) {
ControlValuePropertyAttribute other = obj as ControlValuePropertyAttribute;
if (other != null) {
if (String.Equals(_name, other.Name, StringComparison.Ordinal)) {
if (_defaultValue != null) {
return _defaultValue.Equals(other.DefaultValue);
}
else {
return (other.DefaultValue == null);
}
}
}
return false;
}
public override int GetHashCode() {
return System.Web.Util.HashCodeCombiner.CombineHashCodes(
((Name != null) ? Name.GetHashCode() : 0),
((DefaultValue != null) ? DefaultValue.GetHashCode() : 0));
}
}
}
|