Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / CompMod / System / ComponentModel / Design / Serialization / InstanceDescriptor.cs / 1 / 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. //------------------------------------------------------------------------------ //// 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
- SelectionProcessor.cs
- EnvelopedPkcs7.cs
- WindowsGraphicsCacheManager.cs
- CapabilitiesPattern.cs
- ClientRuntimeConfig.cs
- XsltConvert.cs
- Compilation.cs
- StrongNameUtility.cs
- KnownColorTable.cs
- DivideByZeroException.cs
- OleDbSchemaGuid.cs
- SystemWebCachingSectionGroup.cs
- HtmlControl.cs
- DataGridItem.cs
- ChtmlPageAdapter.cs
- Menu.cs
- CacheEntry.cs
- DiagnosticTraceSource.cs
- LineVisual.cs
- XamlFigureLengthSerializer.cs
- SecureConversationServiceElement.cs
- CultureMapper.cs
- ClrPerspective.cs
- DTCTransactionManager.cs
- TranslateTransform.cs
- SspiHelper.cs
- IntranetCredentialPolicy.cs
- ReadOnlyPropertyMetadata.cs
- DirectoryObjectSecurity.cs
- TreeViewEvent.cs
- CompModSwitches.cs
- WinInet.cs
- SpecialTypeDataContract.cs
- ScrollPatternIdentifiers.cs
- TrackingParameters.cs
- AttachInfo.cs
- UnicastIPAddressInformationCollection.cs
- COM2ExtendedBrowsingHandler.cs
- ToolStripStatusLabel.cs
- Path.cs
- UrlAuthFailedErrorFormatter.cs
- BitmapVisualManager.cs
- ProviderException.cs
- RecognitionResult.cs
- ColorInterpolationModeValidation.cs
- Shape.cs
- ConfigWriter.cs
- SafeFindHandle.cs
- MiniMapControl.xaml.cs
- MD5CryptoServiceProvider.cs
- CodeStatementCollection.cs
- ColorAnimation.cs
- CalendarModeChangedEventArgs.cs
- ConsoleEntryPoint.cs
- EntryPointNotFoundException.cs
- ParserContext.cs
- HighContrastHelper.cs
- hebrewshape.cs
- CompilerCollection.cs
- XsltLibrary.cs
- InArgument.cs
- TemplateBuilder.cs
- ItemContainerProviderWrapper.cs
- DrawTreeNodeEventArgs.cs
- ListViewGroupItemCollection.cs
- BufferedReceiveElement.cs
- EdmToObjectNamespaceMap.cs
- DataPagerFieldCommandEventArgs.cs
- LinqDataSourceView.cs
- NotifyIcon.cs
- ComplexPropertyEntry.cs
- ServiceCredentials.cs
- GregorianCalendarHelper.cs
- PriorityItem.cs
- TextAdaptor.cs
- CaseInsensitiveHashCodeProvider.cs
- SchemaUtility.cs
- FieldNameLookup.cs
- FixedPosition.cs
- GroupLabel.cs
- WhitespaceRuleLookup.cs
- SqlReferenceCollection.cs
- DecoderExceptionFallback.cs
- InvalidCommandTreeException.cs
- MetafileEditor.cs
- InputEventArgs.cs
- Base64Encoder.cs
- SerializerWriterEventHandlers.cs
- PropertyGridEditorPart.cs
- DuplicateDetector.cs
- TextTreeRootNode.cs
- PageThemeCodeDomTreeGenerator.cs
- TransportContext.cs
- MethodImplAttribute.cs
- TypeGeneratedEventArgs.cs
- ServiceHostFactory.cs
- HttpCachePolicy.cs
- XmlAggregates.cs
- CodeDirectiveCollection.cs
- UrlMappingCollection.cs