Skip to content

014 IScriptable

petro edited this page Aug 8, 2013 · 1 revision

IScriptable

Let's look at IScriptable definition:

/// <summary>
/// Expose dynamic members of an Instance to the script.
/// This require using of DefaultObjectBinder class as default object binder.
/// </summary>
public interface IScriptable
{
  /// <summary>
  /// Should return object wrapped by IScriptable or this
  /// </summary>
  [Promote(false)]
  object Instance { get; }

  /// <summary>
  /// Gets a binding to an instance's member (field, property)
  /// </summary>
  [Promote(false)]
  IMemberBinding GetMember(string name, params object[] arguments);

  /// <summary>
  /// Gets a binding to an instance's method
  /// </summary>
  [Promote(false)]
  IBinding GetMethod(string name, params object[] arguments);
}

Each class implementing this interface has special meaning in S#. Let's assume that variable scriptable associated with an instance implementing IScriptable interface. Then following examples are valid in S#:

a = scriptable.PropertyName;
//The same as following code:
//a = scriptable.GetMember("PropertyName").GetValue();

scriptable.PropertyName = 2;
//The same as following code:
//scriptable.GetMember("PropertyName").SetValue(2);

scriptable.MethodName(1,"test", 3);
//The same as following code:
//scriptable.GetMethod("MethodName").Invoke(currentContext, new object[] {1, "test", 3});