2003-07-02 Andreas Nahr <ClassDevelopment@A-SoftTech.com>
[mono.git] / mcs / class / System / System.ComponentModel / ExtenderProvidedPropertyAttribute.cs
1 //
2 // System.ComponentModel.ExtenderProvidedPropertyAttribute.cs
3 //
4 // Author:
5 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
6 //
7 // (C) 2003 Andreas Nahr
8 //
9 \r
10 using System;
11 \r
12 namespace System.ComponentModel
13 {
14
15         [AttributeUsage(AttributeTargets.All)]
16         public sealed class ExtenderProvidedPropertyAttribute : Attribute
17         {\r
18                 private PropertyDescriptor extender;
19                 private IExtenderProvider extenderProvider;
20                 private Type receiver;
21 \r
22                 public ExtenderProvidedPropertyAttribute()
23                 {
24                 }
25 \r
26                 // Call this method to create a ExtenderProvidedPropertyAttribute and set it's values
27                 internal static ExtenderProvidedPropertyAttribute CreateAttribute (PropertyDescriptor extenderProperty, IExtenderProvider provider, Type receiverType)
28                 {
29                         ExtenderProvidedPropertyAttribute NewAttribute = new ExtenderProvidedPropertyAttribute();
30                         NewAttribute.extender = extenderProperty;
31                         NewAttribute.receiver = receiverType;
32                         NewAttribute.extenderProvider = provider;
33                         return NewAttribute; 
34                 }
35
36                 public PropertyDescriptor ExtenderProperty {
37                         get {
38                                 return extender;
39                         }
40                 }
41 \r
42                 public IExtenderProvider Provider {
43                         get {
44                                 return extenderProvider;
45                         }
46                 }
47 \r
48                 public Type ReceiverType {
49                         get {
50                                 return receiver;
51                         }
52                 }
53 \r
54                 public override bool IsDefaultAttribute()
55                 {
56                         // FIXME correct implementation??
57                         return (extender == null) &&
58                         (extenderProvider == null) &&
59                         (receiver == null);
60                 }
61 \r
62                 public override bool Equals (object obj)
63                 {
64                         if (!(obj is ExtenderProvidedPropertyAttribute))
65                                 return false;
66                         if (obj == this)
67                                 return true;
68                         return ((ExtenderProvidedPropertyAttribute) obj).ExtenderProperty.Equals (extender) &&
69                         ((ExtenderProvidedPropertyAttribute) obj).Provider.Equals (extenderProvider) &&
70                         ((ExtenderProvidedPropertyAttribute) obj).ReceiverType.Equals (receiver);
71                 }
72
73                 public override int GetHashCode()
74                 {
75                         return extender.GetHashCode() ^ extenderProvider.GetHashCode() ^ receiver.GetHashCode();
76                 }
77         }
78 }\r