Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridViewCellLinkedList.cs
- ExpandableObjectConverter.cs
- SuppressMessageAttribute.cs
- Property.cs
- NullRuntimeConfig.cs
- DataBindingExpressionBuilder.cs
- ContractTypeNameElement.cs
- ObjectItemAssemblyLoader.cs
- MexBindingElement.cs
- ChildrenQuery.cs
- COM2EnumConverter.cs
- AdornedElementPlaceholder.cs
- ModelPerspective.cs
- Scripts.cs
- ReaderContextStackData.cs
- TagMapInfo.cs
- RightNameExpirationInfoPair.cs
- XmlNamespaceDeclarationsAttribute.cs
- PngBitmapDecoder.cs
- SettingsAttributeDictionary.cs
- _SslStream.cs
- ServiceNameElement.cs
- ClientSideProviderDescription.cs
- TextBox.cs
- QuaternionRotation3D.cs
- SourceFileInfo.cs
- ColumnMapTranslator.cs
- DeferrableContentConverter.cs
- RadioButtonAutomationPeer.cs
- SqlBuilder.cs
- DesignTimeTemplateParser.cs
- ZipIOLocalFileDataDescriptor.cs
- HuffCodec.cs
- TextTreeUndo.cs
- Table.cs
- HandlerBase.cs
- XmlTypeAttribute.cs
- ObsoleteAttribute.cs
- InternalTypeHelper.cs
- FontClient.cs
- XmlSortKeyAccumulator.cs
- TemplatePagerField.cs
- NamespaceDecl.cs
- RankException.cs
- ByteAnimationBase.cs
- InstanceDescriptor.cs
- Track.cs
- DescendentsWalkerBase.cs
- TreeViewAutomationPeer.cs
- SafeCertificateStore.cs
- MenuStrip.cs
- CircleHotSpot.cs
- MsmqTransportElement.cs
- FormViewDeleteEventArgs.cs
- XmlElementAttribute.cs
- RegexCompiler.cs
- IisTraceWebEventProvider.cs
- HMAC.cs
- TemplateApplicationHelper.cs
- PingOptions.cs
- SoapFault.cs
- MetadataImporterQuotas.cs
- ToolStripSplitButton.cs
- WpfSharedBamlSchemaContext.cs
- XmlEventCache.cs
- LinearQuaternionKeyFrame.cs
- ClockGroup.cs
- OleDbInfoMessageEvent.cs
- AjaxFrameworkAssemblyAttribute.cs
- Math.cs
- UIAgentAsyncParams.cs
- LogicalChannelCollection.cs
- PropertyEntry.cs
- XPathParser.cs
- ClientBuildManagerCallback.cs
- GetWinFXPath.cs
- XmlTextReaderImpl.cs
- CodeTypeReferenceExpression.cs
- EncryptedType.cs
- PreviewPageInfo.cs
- ObjectStateEntry.cs
- Logging.cs
- IdentityValidationException.cs
- ServicesUtilities.cs
- TypeSystem.cs
- CompiledRegexRunnerFactory.cs
- DbUpdateCommandTree.cs
- ParseNumbers.cs
- QueryContinueDragEventArgs.cs
- Type.cs
- SlotInfo.cs
- Serializer.cs
- StaticDataManager.cs
- AttributeUsageAttribute.cs
- Tokenizer.cs
- PrivilegedConfigurationManager.cs
- DataProviderNameConverter.cs
- EUCJPEncoding.cs
- DBSqlParserTableCollection.cs
- FastPropertyAccessor.cs