Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / ComponentModel / Design / Serialization / InstanceDescriptor.cs / 1305376 / InstanceDescriptor.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design.Serialization { using System; using System.Collections; using System.Diagnostics; using System.Reflection; using System.Security.Permissions; ////// EventArgs for the ResolveNameEventHandler. This event is used /// by the serialization process to match a name to an object /// instance. /// [HostProtection(SharedState = true)] [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")] public sealed class InstanceDescriptor { private MemberInfo member; private ICollection arguments; private bool isComplete; ////// Creates a new InstanceDescriptor. /// public InstanceDescriptor(MemberInfo member, ICollection arguments) : this(member, arguments, true) { } ////// Creates a new InstanceDescriptor. /// public InstanceDescriptor(MemberInfo member, ICollection arguments, bool isComplete) { this.member = member; this.isComplete = isComplete; if (arguments == null) { this.arguments = new object[0]; } else { object[] args = new object[arguments.Count]; arguments.CopyTo(args, 0); this.arguments = args; } if (member is FieldInfo) { FieldInfo fi = (FieldInfo)member; if (!fi.IsStatic) { throw new ArgumentException(SR.GetString(SR.InstanceDescriptorMustBeStatic)); } if (this.arguments.Count != 0) { throw new ArgumentException(SR.GetString(SR.InstanceDescriptorLengthMismatch)); } } else if (member is ConstructorInfo) { ConstructorInfo ci = (ConstructorInfo)member; if (ci.IsStatic) { throw new ArgumentException(SR.GetString(SR.InstanceDescriptorCannotBeStatic)); } if (this.arguments.Count != ci.GetParameters().Length) { throw new ArgumentException(SR.GetString(SR.InstanceDescriptorLengthMismatch)); } } else if (member is MethodInfo) { MethodInfo mi = (MethodInfo)member; if (!mi.IsStatic) { throw new ArgumentException(SR.GetString(SR.InstanceDescriptorMustBeStatic)); } if (this.arguments.Count != mi.GetParameters().Length) { throw new ArgumentException(SR.GetString(SR.InstanceDescriptorLengthMismatch)); } } else if (member is PropertyInfo) { PropertyInfo pi = (PropertyInfo)member; if (!pi.CanRead) { throw new ArgumentException(SR.GetString(SR.InstanceDescriptorMustBeReadable)); } MethodInfo mi = pi.GetGetMethod(); if (mi != null && !mi.IsStatic) { throw new ArgumentException(SR.GetString(SR.InstanceDescriptorMustBeStatic)); } } } ////// The collection of arguments that should be passed to /// MemberInfo in order to create an instance. /// public ICollection Arguments { get { return arguments; } } ////// Determines if the contents of this instance descriptor completely identify the instance. /// This will normally be the case, but some objects may be too complex for a single method /// or constructor to represent. IsComplete can be used to identify these objects and take /// additional steps to further describe their state. /// public bool IsComplete { get { return isComplete; } } ////// The MemberInfo object that was passed into the constructor /// of this InstanceDescriptor. /// public MemberInfo MemberInfo { get { return member; } } ////// Invokes this instance descriptor, returning the object /// the descriptor describes. /// public object Invoke() { object[] translatedArguments = new object[arguments.Count]; arguments.CopyTo(translatedArguments, 0); // Instance descriptors can contain other instance // descriptors. Translate them if necessary. // for(int i = 0; i < translatedArguments.Length; i++) { if (translatedArguments[i] is InstanceDescriptor) { translatedArguments[i] = ((InstanceDescriptor)translatedArguments[i]).Invoke(); } } if (member is ConstructorInfo) { return ((ConstructorInfo)member).Invoke(translatedArguments); } else if (member is MethodInfo) { return ((MethodInfo)member).Invoke(null, translatedArguments); } else if (member is PropertyInfo) { return ((PropertyInfo)member).GetValue(null, translatedArguments); } else if (member is FieldInfo) { return ((FieldInfo)member).GetValue(null); } else { Debug.Fail("Unrecognized reflection type in instance descriptor: " + member.GetType().Name); } return null; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlSchemaExternal.cs
- UpdateProgress.cs
- CustomAttributeSerializer.cs
- BehaviorService.cs
- DataDocumentXPathNavigator.cs
- Imaging.cs
- Grant.cs
- ImageKeyConverter.cs
- IgnorePropertiesAttribute.cs
- DataMisalignedException.cs
- PenLineJoinValidation.cs
- VectorCollectionConverter.cs
- PersistenceProviderDirectory.cs
- TableParaClient.cs
- propertytag.cs
- Console.cs
- XPathParser.cs
- HttpClientProtocol.cs
- SupportingTokenChannel.cs
- SessionEndedEventArgs.cs
- StoreConnection.cs
- DescriptionAttribute.cs
- XmlTextReaderImplHelpers.cs
- PopupRoot.cs
- EventDrivenDesigner.cs
- wgx_sdk_version.cs
- SmuggledIUnknown.cs
- TextLineResult.cs
- CompoundFileDeflateTransform.cs
- EndOfStreamException.cs
- translator.cs
- TreeViewAutomationPeer.cs
- Vector3DValueSerializer.cs
- DocumentCollection.cs
- KeyGestureValueSerializer.cs
- Intellisense.cs
- TextMarkerSource.cs
- IxmlLineInfo.cs
- SHA1CryptoServiceProvider.cs
- CachedTypeface.cs
- XmlTextReaderImplHelpers.cs
- PersonalizationStateInfo.cs
- TimersDescriptionAttribute.cs
- CalendarDay.cs
- XmlQueryOutput.cs
- WsatAdminException.cs
- DataRelation.cs
- PageCatalogPartDesigner.cs
- RoleGroup.cs
- Panel.cs
- TextPointer.cs
- ValueChangedEventManager.cs
- TransactionInterop.cs
- XhtmlTextWriter.cs
- Debug.cs
- JoinSymbol.cs
- ControlCachePolicy.cs
- VirtualizingPanel.cs
- VirtualDirectoryMappingCollection.cs
- WebServiceTypeData.cs
- TagMapInfo.cs
- ProjectionRewriter.cs
- recordstatescratchpad.cs
- TraceSource.cs
- XmlElementAttributes.cs
- ConstraintConverter.cs
- TreeNodeEventArgs.cs
- RelationshipManager.cs
- TextTreeDeleteContentUndoUnit.cs
- _LocalDataStore.cs
- BitmapSource.cs
- VScrollProperties.cs
- HtmlHead.cs
- Stackframe.cs
- ExtentKey.cs
- DynamicResourceExtension.cs
- EventBindingService.cs
- RuntimeArgumentHandle.cs
- RuntimeHelpers.cs
- AssociatedControlConverter.cs
- BindingMemberInfo.cs
- WebPartEditVerb.cs
- ParseChildrenAsPropertiesAttribute.cs
- BlobPersonalizationState.cs
- AuthenticationConfig.cs
- CreatingCookieEventArgs.cs
- SerializerDescriptor.cs
- Transform3DGroup.cs
- WebPartDisplayModeCancelEventArgs.cs
- ProfileService.cs
- RangeValueProviderWrapper.cs
- XmlSchemaNotation.cs
- NativeCppClassAttribute.cs
- XmlDataImplementation.cs
- NumericExpr.cs
- DecoderBestFitFallback.cs
- StaticExtension.cs
- ToolboxCategoryItems.cs
- NamedPipeChannelListener.cs
- QueryRewriter.cs