using System.Collections.Generic;
using System.Linq.Expressions;
namespace System.Dynamic
{
//
// Summary:
// Provides a base class for specifying dynamic behavior at run time. This class
// must be inherited from; you cannot instantiate it directly.
public class DynamicObject : IDynamicMetaObjectProvider
{
//
// Summary:
// Enables derived types to initialize a new instance of the System.Dynamic.DynamicObject
// type.
protected DynamicObject();
//
// Summary:
// Returns the enumeration of all dynamic member names.
//
// Returns:
// A sequence that contains dynamic member names.
public virtual IEnumerable<string> GetDynamicMemberNames();
//
// Summary:
// Provides a System.Dynamic.DynamicMetaObject that dispatches to the dynamic virtual
// methods. The object can be encapsulated inside another System.Dynamic.DynamicMetaObject
// to provide custom behavior for individual actions. This method supports the Dynamic
// Language Runtime infrastructure for language implementers and it is not intended
// to be used directly from your code.
//
// Parameters:
// parameter:
// The expression that represents System.Dynamic.DynamicMetaObject to dispatch to
// the dynamic virtual methods.
//
// Returns:
// An object of the System.Dynamic.DynamicMetaObject type.
public virtual DynamicMetaObject GetMetaObject(Expression parameter);
//
// Summary:
// Provides implementation for binary operations. Classes derived from the System.Dynamic.DynamicObject
// class can override this method to specify dynamic behavior for operations such
// as addition and multiplication.
//
// Parameters:
// binder:
// Provides information about the binary operation. The binder.Operation property
// returns an System.Linq.Expressions.ExpressionType object. For example, for the
// sum = first + second statement, where first and second are derived from the DynamicObject
// class, binder.Operation returns ExpressionType.Add.
//
// arg:
// The right operand for the binary operation. For example, for the sum = first
// + second statement, where first and second are derived from the DynamicObject
// class, arg is equal to second.
//
// result:
// The result of the binary operation.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.)
public virtual bool TryBinaryOperation(BinaryOperationBinder binder, object arg, out object result);
//
// Summary:
// Provides implementation for type conversion operations. Classes derived from
// the System.Dynamic.DynamicObject class can override this method to specify dynamic
// behavior for operations that convert an object from one type to another.
//
// Parameters:
// binder:
// Provides information about the conversion operation. The binder.Type property
// provides the type to which the object must be converted. For example, for the
// statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic),
// where sampleObject is an instance of the class derived from the System.Dynamic.DynamicObject
// class, binder.Type returns the System.String type. The binder.Explicit property
// provides information about the kind of conversion that occurs. It returns true
// for explicit conversion and false for implicit conversion.
//
// result:
// The result of the type conversion operation.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.)
public virtual bool TryConvert(ConvertBinder binder, out object result);
//
// Summary:
// Provides the implementation for operations that initialize a new instance of
// a dynamic object. This method is not intended for use in C# or Visual Basic.
//
// Parameters:
// binder:
// Provides information about the initialization operation.
//
// args:
// The arguments that are passed to the object during initialization. For example,
// for the new SampleType(100) operation, where SampleType is the type derived from
// the System.Dynamic.DynamicObject class, args[0] is equal to 100.
//
// result:
// The result of the initialization.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.)
public virtual bool TryCreateInstance(CreateInstanceBinder binder, object[] args, out object result);
//
// Summary:
// Provides the implementation for operations that delete an object by index. This
// method is not intended for use in C# or Visual Basic.
//
// Parameters:
// binder:
// Provides information about the deletion.
//
// indexes:
// The indexes to be deleted.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.)
public virtual bool TryDeleteIndex(DeleteIndexBinder binder, object[] indexes);
//
// Summary:
// Provides the implementation for operations that delete an object member. This
// method is not intended for use in C# or Visual Basic.
//
// Parameters:
// binder:
// Provides information about the deletion.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.)
public virtual bool TryDeleteMember(DeleteMemberBinder binder);
//
// Summary:
// Provides the implementation for operations that get a value by index. Classes
// derived from the System.Dynamic.DynamicObject class can override this method
// to specify dynamic behavior for indexing operations.
//
// Parameters:
// binder:
// Provides information about the operation.
//
// indexes:
// The indexes that are used in the operation. For example, for the sampleObject[3]
// operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived
// from the DynamicObject class, indexes[0] is equal to 3.
//
// result:
// The result of the index operation.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a run-time exception is thrown.)
public virtual bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result);
//
// Summary:
// Provides the implementation for operations that get member values. Classes derived
// from the System.Dynamic.DynamicObject class can override this method to specify
// dynamic behavior for operations such as getting a value for a property.
//
// Parameters:
// binder:
// Provides information about the object that called the dynamic operation. The
// binder.Name property provides the name of the member on which the dynamic operation
// is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty)
// statement, where sampleObject is an instance of the class derived from the System.Dynamic.DynamicObject
// class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies
// whether the member name is case-sensitive.
//
// result:
// The result of the get operation. For example, if the method is called for a property,
// you can assign the property value to result.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a run-time exception is thrown.)
public virtual bool TryGetMember(GetMemberBinder binder, out object result);
//
// Summary:
// Provides the implementation for operations that invoke an object. Classes derived
// from the System.Dynamic.DynamicObject class can override this method to specify
// dynamic behavior for operations such as invoking an object or a delegate.
//
// Parameters:
// binder:
// Provides information about the invoke operation.
//
// args:
// The arguments that are passed to the object during the invoke operation. For
// example, for the sampleObject(100) operation, where sampleObject is derived from
// the System.Dynamic.DynamicObject class, args[0] is equal to 100.
//
// result:
// The result of the object invocation.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.
public virtual bool TryInvoke(InvokeBinder binder, object[] args, out object result);
//
// Summary:
// Provides the implementation for operations that invoke a member. Classes derived
// from the System.Dynamic.DynamicObject class can override this method to specify
// dynamic behavior for operations such as calling a method.
//
// Parameters:
// binder:
// Provides information about the dynamic operation. The binder.Name property provides
// the name of the member on which the dynamic operation is performed. For example,
// for the statement sampleObject.SampleMethod(100), where sampleObject is an instance
// of the class derived from the System.Dynamic.DynamicObject class, binder.Name
// returns "SampleMethod". The binder.IgnoreCase property specifies whether the
// member name is case-sensitive.
//
// args:
// The arguments that are passed to the object member during the invoke operation.
// For example, for the statement sampleObject.SampleMethod(100), where sampleObject
// is derived from the System.Dynamic.DynamicObject class, args[0] is equal to 100.
//
// result:
// The result of the member invocation.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.)
public virtual bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result);
//
// Summary:
// Provides the implementation for operations that set a value by index. Classes
// derived from the System.Dynamic.DynamicObject class can override this method
// to specify dynamic behavior for operations that access objects by a specified
// index.
//
// Parameters:
// binder:
// Provides information about the operation.
//
// indexes:
// The indexes that are used in the operation. For example, for the sampleObject[3]
// = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject
// is derived from the System.Dynamic.DynamicObject class, indexes[0] is equal to
// 3.
//
// value:
// The value to set to the object that has the specified index. For example, for
// the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic),
// where sampleObject is derived from the System.Dynamic.DynamicObject class, value
// is equal to 10.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.
public virtual bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value);
//
// Summary:
// Provides the implementation for operations that set member values. Classes derived
// from the System.Dynamic.DynamicObject class can override this method to specify
// dynamic behavior for operations such as setting a value for a property.
//
// Parameters:
// binder:
// Provides information about the object that called the dynamic operation. The
// binder.Name property provides the name of the member to which the value is being
// assigned. For example, for the statement sampleObject.SampleProperty = "Test",
// where sampleObject is an instance of the class derived from the System.Dynamic.DynamicObject
// class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies
// whether the member name is case-sensitive.
//
// value:
// The value to set to the member. For example, for sampleObject.SampleProperty
// = "Test", where sampleObject is an instance of the class derived from the System.Dynamic.DynamicObject
// class, the value is "Test".
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.)
public virtual bool TrySetMember(SetMemberBinder binder, object value);
//
// Summary:
// Provides implementation for unary operations. Classes derived from the System.Dynamic.DynamicObject
// class can override this method to specify dynamic behavior for operations such
// as negation, increment, or decrement.
//
// Parameters:
// binder:
// Provides information about the unary operation. The binder.Operation property
// returns an System.Linq.Expressions.ExpressionType object. For example, for the
// negativeNumber = -number statement, where number is derived from the DynamicObject
// class, binder.Operation returns "Negate".
//
// result:
// The result of the unary operation.
//
// Returns:
// true if the operation is successful; otherwise, false. If this method returns
// false, the run-time binder of the language determines the behavior. (In most
// cases, a language-specific run-time exception is thrown.)
public virtual bool TryUnaryOperation(UnaryOperationBinder binder, out object result);
}`enter code here`
}