


# FromFileResult class













## Constructors

[FromFileResult](../zircon/FromFileResult/FromFileResult.md) (int status, [[Handle](../zircon/Handle-class.md) _handle, int _numBytes])

  _const_ 


## Properties

##### [handle](../zircon/FromFileResult/handle.md) &#8594; [Handle](../zircon/Handle-class.md)



  
_<span class="feature">read-only</span>_



##### [hashCode](../zircon/FromFileResult/hashCode.md) &#8594; int



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



##### [numBytes](../zircon/FromFileResult/numBytes.md) &#8594; int



  
_<span class="feature">read-only</span>_



##### [runtimeType](../zircon/FromFileResult/runtimeType.md) &#8594; Type



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



##### [status](../zircon/FromFileResult/status.md) &#8594; int



  
_<span class="feature">final</span><span class="feature">inherited</span>_





## Methods

##### [noSuchMethod](../zircon/FromFileResult/noSuchMethod.md)(Invocation invocation) dynamic



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



##### [toString](../zircon/FromFileResult/toString.md)() String



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





## Operators

##### [operator ==](../zircon/FromFileResult/operator_equals.md)(Object other) bool



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















