using System;
namespace AnticipatingMinds.Genesis.CodeDOM{
/// <summary>
/// Represents an expression that invokes a method.
/// </summary>
[Serializable]
public class CodeMethodInvokeExpression : CodeReferenceExpression
{
#region Public instance properties
/// <summary>
/// Gets or sets the reference expression that points to a method or delegate to invoke.
/// </summary>
/// <remarks>
/// This is generaly either a reference expression (this, base)
/// or a named referenece Expression (myMethod(), or even myDelegatesArray[2]())
/// or a parenthesized expression ( ((MyDelegate)myDelegatesArray[2])(myArgument1,myArguman2); )
/// </remarks>
public CodeExpression MethodReferenceExpression
{
get
{
return method;
}
set
{
method = value;
}
}
/// <summary>
/// Returns method name if method is being invoked.
/// Returns String.empty if the delegate referenced invokation.
/// </summary>
public string MethodName
{
get
{
if(MethodReferenceExpression != null && MethodReferenceExpression is CodeNamedReferenceExpression)
return (MethodReferenceExpression as CodeNamedReferenceExpression).Name;
return string.Empty;
}
}
/// <summary>
/// Gets the arguments to invoke the method with.
/// </summary>
public CodeArgumentCollection Arguments
{
get
{
return arguments;
}
}
public override object Clone()
{
CodeMethodInvokeExpression clonedMethodInvokeExpression = base.Clone () as CodeMethodInvokeExpression;
if(clonedMethodInvokeExpression.MethodReferenceExpression != null)
clonedMethodInvokeExpression.MethodReferenceExpression = MethodReferenceExpression.Clone() as CodeExpression;
return clonedMethodInvokeExpression;
}
#endregion Public instance properties
#region Private instance fields
private CodeExpression method;
private CodeArgumentCollection arguments = new CodeArgumentCollection();
#endregion Private instance fields
}
}
|