using System;
using System.Collections.Generic;
using System.Text;

namespace Vortex.Utils.Reflection {

	/// <summary>
	/// Provides abstract interface for instance value proxy
	/// </summary>
	public interface IValueProxy {

		/// <summary>
		/// Gets the target instance of this proxy.
		/// </summary>
		/// <value>The target instance of this proxy.</value>
		object Instance { get; }

		/// <summary>
		/// Gets the name of proxied value accessor.
		/// </summary>
		/// <value>The name of proxied accessor.</value>
		string Name { get; }

		/// <summary>
		/// Gets the type of the value.
		/// </summary>
		/// <value>The type of the value.</value>
		Type ValueType { get; }

		/// <summary>
		/// Gets or sets the value of target instance.
		/// </summary>
		/// <value>The proxied value.</value>
		object Value { get; set; }
	}
}
