


# Binding&lt;T> class









<p>Listens for messages and dispatches them to an implementation of T.</p>




## Constructors

[Binding](../package-fidl_fidl/Binding/Binding.md) ()

Creates a binding object in an unbound state.   


## Properties

##### [hashCode](../package-fidl_fidl/Binding/hashCode.md) &#8594; int



The hash code for this object.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [impl](../package-fidl_fidl/Binding/impl.md) &#8594; T



The implementation of <code>T</code> bound using this object.  
_<span class="feature">read-only</span>_



##### [isBound](../package-fidl_fidl/Binding/isBound.md) &#8594; bool



Whether this object is bound to a channel.  
_<span class="feature">read-only</span>_



##### [onBind](../package-fidl_fidl/Binding/onBind.md) &#8596; _VoidCallback



Event for binding.  
_<span class="feature">read / write</span>_



##### [onClose](../package-fidl_fidl/Binding/onClose.md) &#8596; _VoidCallback



Event for when the binding is closed.  
_<span class="feature">read / write</span>_



##### [onConnectionError](../package-fidl_fidl/Binding/onConnectionError.md) &#8596; _VoidCallback



Called when the channel underneath closes.  
_<span class="feature">read / write</span>_



##### [onUnbind](../package-fidl_fidl/Binding/onUnbind.md) &#8596; _VoidCallback



Event for unbinding.  
_<span class="feature">read / write</span>_



##### [runtimeType](../package-fidl_fidl/Binding/runtimeType.md) &#8594; Type



A representation of the runtime type of the object.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_





## Methods

##### [bind](../package-fidl_fidl/Binding/bind.md)(T impl, [InterfaceRequest](../package-fidl_fidl/InterfaceRequest-class.md)&lt;T> interfaceRequest) void



Binds the given implementation to the given interface request.  




##### [close](../package-fidl_fidl/Binding/close.md)() void



Close the bound channel.  




##### [handleMessage](../package-fidl_fidl/Binding/handleMessage.md)([IncomingMessage](../package-fidl_fidl/IncomingMessage-class.md) message, [OutgoingMessageSink](../package-fidl_fidl/OutgoingMessageSink.md) respond) void



Decodes the given message and dispatches the decoded message to <a href="../package-fidl_fidl/Binding/impl.md">impl</a>.  




##### [noSuchMethod](../package-fidl_fidl/Binding/noSuchMethod.md)(Invocation invocation) dynamic



Invoked when a non-existent method or property is accessed.  
_<span class="feature">inherited</span>_



##### [sendMessage](../package-fidl_fidl/Binding/sendMessage.md)([OutgoingMessage](../package-fidl_fidl/OutgoingMessage-class.md) response) void



Sends the given message over the bound channel.  




##### [toString](../package-fidl_fidl/Binding/toString.md)() String



A string representation of this object.  
_<span class="feature">inherited</span>_



##### [unbind](../package-fidl_fidl/Binding/unbind.md)() [InterfaceRequest](../package-fidl_fidl/InterfaceRequest-class.md)&lt;T>



Unbinds <a href="../package-fidl_fidl/Binding/impl.md">impl</a> and returns the unbound channel as an interface request.  




##### [wrap](../package-fidl_fidl/Binding/wrap.md)(T impl) [InterfaceHandle](../package-fidl_fidl/InterfaceHandle-class.md)&lt;T>



Returns an interface handle whose peer is bound to the given object.  






## Operators

##### [operator ==](../package-fidl_fidl/Binding/operator_equals.md)(Object other) bool



The equality operator.  
_<span class="feature">inherited</span>_















