/// <summary>
 /// Determines whether the exposed type by the specified script derives from the specified type.
 /// </summary>
 /// <param name="externalType">The type exposed by the script.</param>
 /// <param name="internalType">The internal abstract type which the external type derives from.</param>
 /// <returns>
 ///   <c>true</c> if it is a subclass of the specified type; otherwise, <c>false</c>.
 /// </returns>
 public abstract bool IsCompatible(ExternalType externalType, Type internalType);
 /// <summary>
 /// Creates a new instance from the specified type.
 /// </summary>
 /// <typeparam name="T">The internal abstract type to cast the new instance to.</typeparam>
 /// <param name="type">The type exposed by the script.</param>
 /// <returns>
 /// A new instance from the specified type.
 /// </returns>
 public abstract T CreateInstance <T>(ExternalType type);