Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / MethodExecutor.cs / 1305376 / MethodExecutor.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Statements { using System; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Runtime; // Inverted Template Method pattern. MethodExecutor is the base class for executing a method; created by MethodResolver. // Private concrete implementations are created by MethodResolver, but this is the "public" API used by InvokeMethod. abstract class MethodExecutor { // Used for creating tracing messages w/ DisplayName Activity invokingActivity; // We may still need to know targetType if we're autocreating targets during ExecuteMethod Type targetType; InArgument targetObject; Collectionparameters; RuntimeArgument returnObject; public MethodExecutor(Activity invokingActivity, Type targetType, InArgument targetObject, Collection parameters, RuntimeArgument returnObject) { Fx.Assert(invokingActivity != null, "Must provide invokingActivity"); Fx.Assert(targetType != null || (targetObject != null), "Must provide targetType or targetObject"); Fx.Assert(parameters != null, "Must provide parameters"); // returnObject is optional this.invokingActivity = invokingActivity; this.targetType = targetType; this.targetObject = targetObject; this.parameters = parameters; this.returnObject = returnObject; } public abstract bool MethodIsStatic { get; } protected abstract IAsyncResult BeginMakeMethodCall(AsyncCodeActivityContext context, object target, AsyncCallback callback, object state); protected abstract void EndMakeMethodCall(AsyncCodeActivityContext context, IAsyncResult result); static bool HaveParameterArray(ParameterInfo[] parameters) { if (parameters.Length > 0) { ParameterInfo last = parameters[parameters.Length - 1]; return last.GetCustomAttributes(typeof(ParamArrayAttribute), true).GetLength(0) > 0; } else { return false; } } protected object[] EvaluateAndPackParameters(CodeActivityContext context, MethodInfo method, bool usingAsyncPattern) { ParameterInfo[] formalParameters = method.GetParameters(); int formalParamCount = formalParameters.Length; object[] actualParameters = new object[formalParamCount]; if (usingAsyncPattern) { formalParamCount -= 2; } bool haveParameterArray = HaveParameterArray(formalParameters); for (int i = 0; i < formalParamCount; i++) { if (i == formalParamCount - 1 && !usingAsyncPattern && haveParameterArray) { int paramArrayCount = this.parameters.Count - formalParamCount + 1; // If params are given explicitly, that's okay. if (paramArrayCount == 1 && TypeHelper.AreTypesCompatible(this.parameters[i].ArgumentType, formalParameters[i].ParameterType)) { actualParameters[i] = this.parameters[i].Get
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextServicesDisplayAttributePropertyRanges.cs
- DataControlField.cs
- CapabilitiesUse.cs
- FileDialog_Vista.cs
- GridEntry.cs
- CheckoutException.cs
- ReflectionHelper.cs
- TimelineGroup.cs
- HtmlImage.cs
- EncryptedXml.cs
- TaiwanCalendar.cs
- CharEntityEncoderFallback.cs
- ControlPropertyNameConverter.cs
- ProxyElement.cs
- arc.cs
- SigningDialog.cs
- HwndKeyboardInputProvider.cs
- WebBrowserNavigatedEventHandler.cs
- TimelineClockCollection.cs
- UpDownBase.cs
- KeyInfo.cs
- DBConnectionString.cs
- MethodToken.cs
- RegularExpressionValidator.cs
- MutexSecurity.cs
- WebPartZone.cs
- WindowsFont.cs
- ObjectViewFactory.cs
- LicenseManager.cs
- ElementUtil.cs
- CompiledQueryCacheKey.cs
- ToolStripMenuItem.cs
- DelegateBodyWriter.cs
- Int32CollectionConverter.cs
- DataGridViewCellValidatingEventArgs.cs
- TreeNodeSelectionProcessor.cs
- TextureBrush.cs
- DependencyPropertyConverter.cs
- FieldBuilder.cs
- WindowsListViewGroup.cs
- DataGridViewComboBoxColumn.cs
- EventRoute.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- MeshGeometry3D.cs
- WebPartEventArgs.cs
- ValidationError.cs
- Executor.cs
- UnionCodeGroup.cs
- AncestorChangedEventArgs.cs
- RenderTargetBitmap.cs
- Decimal.cs
- NotSupportedException.cs
- Point3D.cs
- TextEndOfLine.cs
- ToolStripRenderEventArgs.cs
- MaskDesignerDialog.cs
- AnnouncementEndpointElement.cs
- DependentList.cs
- NetSectionGroup.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- Vector3D.cs
- CompiledRegexRunner.cs
- ExpressionBuilder.cs
- OutputCacheProfile.cs
- PersonalizableAttribute.cs
- NullableDecimalSumAggregationOperator.cs
- OleStrCAMarshaler.cs
- Missing.cs
- TextDecorationCollection.cs
- XPathConvert.cs
- CodeTypeParameter.cs
- TextTreeText.cs
- QueryContinueDragEventArgs.cs
- ToolStripComboBox.cs
- GetLedgerEntryForRecipientRequest.cs
- SynchronizedInputHelper.cs
- AttributeEmitter.cs
- CodeConstructor.cs
- ConnectionsZone.cs
- Debug.cs
- SmtpCommands.cs
- PolyBezierSegment.cs
- SAPICategories.cs
- StrokeCollectionDefaultValueFactory.cs
- DbMetaDataFactory.cs
- EndpointReference.cs
- ToolStripItemRenderEventArgs.cs
- VarRemapper.cs
- CodeMemberField.cs
- ColumnCollection.cs
- control.ime.cs
- ToolTip.cs
- webproxy.cs
- ParallelDesigner.cs
- DataViewListener.cs
- InfoCardTrace.cs
- CollectionTraceRecord.cs
- QilScopedVisitor.cs
- DataGridHeaderBorder.cs
- InvocationExpression.cs