Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / Shared / DelegateTypeInfo.cs / 1305376 / DelegateTypeInfo.cs
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
// WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
// THE ENTIRE RISK OF USE OR RESULTS IN CONNECTION WITH THE USE OF THIS CODE
// AND INFORMATION REMAINS WITH THE USER.
/**********************************************************************
* NOTE: A copy of this file exists at: WF\Activities\Common
* The two files must be kept in [....]. Any change made here must also
* be made to WF\Activities\Common\DelegateTypeInfo.cs
*********************************************************************/
namespace System.Workflow.ComponentModel
{
using System;
using System.CodeDom;
using System.Collections;
using System.Globalization;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Reflection;
using System.Diagnostics.CodeAnalysis;
internal class DelegateTypeInfo
{
private CodeParameterDeclarationExpression[] parameters;
private Type[] parameterTypes;
private CodeTypeReference returnType;
internal CodeParameterDeclarationExpression[] Parameters
{
get
{
return parameters;
}
}
internal Type[] ParameterTypes
{
get
{
return parameterTypes;
}
}
internal CodeTypeReference ReturnType
{
get
{
return returnType;
}
}
internal DelegateTypeInfo(Type delegateClass)
{
Resolve(delegateClass);
}
[SuppressMessage("Microsoft.Globalization", "CA1307:SpecifyStringComparison", Justification = "EndsWith(\"&\") not a security issue.")]
private void Resolve(Type delegateClass)
{
MethodInfo invokeMethod = delegateClass.GetMethod("Invoke");
if (invokeMethod == null)
throw new ArgumentException("delegateClass");
Resolve(invokeMethod);
}
[SuppressMessage("Microsoft.Globalization", "CA1307:SpecifyStringComparison", Justification = "EndsWith(\"&\") not a security issue.")]
private void Resolve(MethodInfo method)
{
// Here we build up an array of argument types, separated
// by commas.
ParameterInfo[] argTypes = method.GetParameters();
parameters = new CodeParameterDeclarationExpression[argTypes.Length];
parameterTypes = new Type[argTypes.Length];
for (int index = 0; index < argTypes.Length; index++)
{
string paramName = argTypes[index].Name;
Type paramType = argTypes[index].ParameterType;
if (paramName == null || paramName.Length == 0)
paramName = "param" + index.ToString(CultureInfo.InvariantCulture);
FieldDirection fieldDir = FieldDirection.In;
// check for the '&' that means ref (gotta love it!)
// and we need to strip that & before we continue. Ouch.
if (paramType.IsByRef)
{
if (paramType.FullName.EndsWith("&"))
{
// strip the & and reload the type without it.
paramType = paramType.Assembly.GetType(paramType.FullName.Substring(0, paramType.FullName.Length - 1), true);
}
fieldDir = FieldDirection.Ref;
}
if (argTypes[index].IsOut)
{
if (argTypes[index].IsIn)
fieldDir = FieldDirection.Ref;
else
fieldDir = FieldDirection.Out;
}
parameters[index] = new CodeParameterDeclarationExpression(new CodeTypeReference(paramType), paramName);
parameters[index].Direction = fieldDir;
parameterTypes[index] = paramType;
}
this.returnType = new CodeTypeReference(method.ReturnType);
}
public override bool Equals(object other)
{
if (other == null)
return false;
DelegateTypeInfo dtiOther = other as DelegateTypeInfo;
if (dtiOther == null)
return false;
if (ReturnType.BaseType != dtiOther.ReturnType.BaseType || Parameters.Length != dtiOther.Parameters.Length)
return false;
for (int parameter = 0; parameter < Parameters.Length; parameter++)
{
CodeParameterDeclarationExpression otherParam = dtiOther.Parameters[parameter];
if (otherParam.Type.BaseType != Parameters[parameter].Type.BaseType)
return false;
}
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
// WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
// THE ENTIRE RISK OF USE OR RESULTS IN CONNECTION WITH THE USE OF THIS CODE
// AND INFORMATION REMAINS WITH THE USER.
/**********************************************************************
* NOTE: A copy of this file exists at: WF\Activities\Common
* The two files must be kept in [....]. Any change made here must also
* be made to WF\Activities\Common\DelegateTypeInfo.cs
*********************************************************************/
namespace System.Workflow.ComponentModel
{
using System;
using System.CodeDom;
using System.Collections;
using System.Globalization;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Reflection;
using System.Diagnostics.CodeAnalysis;
internal class DelegateTypeInfo
{
private CodeParameterDeclarationExpression[] parameters;
private Type[] parameterTypes;
private CodeTypeReference returnType;
internal CodeParameterDeclarationExpression[] Parameters
{
get
{
return parameters;
}
}
internal Type[] ParameterTypes
{
get
{
return parameterTypes;
}
}
internal CodeTypeReference ReturnType
{
get
{
return returnType;
}
}
internal DelegateTypeInfo(Type delegateClass)
{
Resolve(delegateClass);
}
[SuppressMessage("Microsoft.Globalization", "CA1307:SpecifyStringComparison", Justification = "EndsWith(\"&\") not a security issue.")]
private void Resolve(Type delegateClass)
{
MethodInfo invokeMethod = delegateClass.GetMethod("Invoke");
if (invokeMethod == null)
throw new ArgumentException("delegateClass");
Resolve(invokeMethod);
}
[SuppressMessage("Microsoft.Globalization", "CA1307:SpecifyStringComparison", Justification = "EndsWith(\"&\") not a security issue.")]
private void Resolve(MethodInfo method)
{
// Here we build up an array of argument types, separated
// by commas.
ParameterInfo[] argTypes = method.GetParameters();
parameters = new CodeParameterDeclarationExpression[argTypes.Length];
parameterTypes = new Type[argTypes.Length];
for (int index = 0; index < argTypes.Length; index++)
{
string paramName = argTypes[index].Name;
Type paramType = argTypes[index].ParameterType;
if (paramName == null || paramName.Length == 0)
paramName = "param" + index.ToString(CultureInfo.InvariantCulture);
FieldDirection fieldDir = FieldDirection.In;
// check for the '&' that means ref (gotta love it!)
// and we need to strip that & before we continue. Ouch.
if (paramType.IsByRef)
{
if (paramType.FullName.EndsWith("&"))
{
// strip the & and reload the type without it.
paramType = paramType.Assembly.GetType(paramType.FullName.Substring(0, paramType.FullName.Length - 1), true);
}
fieldDir = FieldDirection.Ref;
}
if (argTypes[index].IsOut)
{
if (argTypes[index].IsIn)
fieldDir = FieldDirection.Ref;
else
fieldDir = FieldDirection.Out;
}
parameters[index] = new CodeParameterDeclarationExpression(new CodeTypeReference(paramType), paramName);
parameters[index].Direction = fieldDir;
parameterTypes[index] = paramType;
}
this.returnType = new CodeTypeReference(method.ReturnType);
}
public override bool Equals(object other)
{
if (other == null)
return false;
DelegateTypeInfo dtiOther = other as DelegateTypeInfo;
if (dtiOther == null)
return false;
if (ReturnType.BaseType != dtiOther.ReturnType.BaseType || Parameters.Length != dtiOther.Parameters.Length)
return false;
for (int parameter = 0; parameter < Parameters.Length; parameter++)
{
CodeParameterDeclarationExpression otherParam = dtiOther.Parameters[parameter];
if (otherParam.Type.BaseType != Parameters[parameter].Type.BaseType)
return false;
}
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
// 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
- StorageComplexPropertyMapping.cs
- IntAverageAggregationOperator.cs
- PrintDocument.cs
- ProfileServiceManager.cs
- NameNode.cs
- ColorBlend.cs
- CharacterHit.cs
- Vector3DAnimationBase.cs
- ShaderEffect.cs
- DateTimeConverter2.cs
- OrderPreservingPipeliningMergeHelper.cs
- IdentifierElement.cs
- Lease.cs
- DPTypeDescriptorContext.cs
- CroppedBitmap.cs
- LayoutTableCell.cs
- XmlMembersMapping.cs
- MulticastDelegate.cs
- SectionRecord.cs
- DataGridViewCellLinkedList.cs
- BasePropertyDescriptor.cs
- OleDbInfoMessageEvent.cs
- GregorianCalendarHelper.cs
- SystemIcmpV4Statistics.cs
- Stack.cs
- MSAAWinEventWrap.cs
- QilStrConcatenator.cs
- XPathPatternBuilder.cs
- Formatter.cs
- NavigatorInvalidBodyAccessException.cs
- PerformanceCounterPermissionEntry.cs
- TypeDescriptionProviderAttribute.cs
- SqlTopReducer.cs
- NumericUpDownAcceleration.cs
- CustomExpressionEventArgs.cs
- CodeGeneratorOptions.cs
- DbConnectionHelper.cs
- CorrelationTokenInvalidatedHandler.cs
- PointAnimationUsingKeyFrames.cs
- SyndicationSerializer.cs
- SystemFonts.cs
- ScrollChangedEventArgs.cs
- AddInSegmentDirectoryNotFoundException.cs
- odbcmetadatafactory.cs
- LinkLabel.cs
- InternalConfigRoot.cs
- SimpleType.cs
- ProfileSettings.cs
- ToolStripRendererSwitcher.cs
- _TransmitFileOverlappedAsyncResult.cs
- EntityDataSourceDesigner.cs
- QueryCursorEventArgs.cs
- _LoggingObject.cs
- RawStylusInputCustomData.cs
- DataGridViewColumnCollection.cs
- ReliabilityContractAttribute.cs
- DelegateArgumentReference.cs
- TransformationRules.cs
- FrameworkContentElement.cs
- ComponentEditorPage.cs
- Helpers.cs
- LostFocusEventManager.cs
- FileNameEditor.cs
- CssTextWriter.cs
- XmlBoundElement.cs
- Run.cs
- FormViewModeEventArgs.cs
- XmlNodeComparer.cs
- StylusLogic.cs
- SmiRequestExecutor.cs
- FragmentQueryProcessor.cs
- NativeMethods.cs
- TraceListener.cs
- SchemaElementDecl.cs
- ContainerVisual.cs
- XmlUtf8RawTextWriter.cs
- InternalRelationshipCollection.cs
- PublishLicense.cs
- GacUtil.cs
- _Semaphore.cs
- ObjectComplexPropertyMapping.cs
- GPPOINTF.cs
- RepeatButton.cs
- QueryCacheManager.cs
- DocumentPageView.cs
- OracleTransaction.cs
- ConditionalAttribute.cs
- PerformanceCounterManager.cs
- XamlVector3DCollectionSerializer.cs
- ParseNumbers.cs
- AttributeCollection.cs
- ReachDocumentSequenceSerializer.cs
- ISCIIEncoding.cs
- EntityProviderServices.cs
- wgx_sdk_version.cs
- MessageFilter.cs
- XmlSchemaAnnotated.cs
- ListMarkerSourceInfo.cs
- DbProviderServices.cs
- CharUnicodeInfo.cs