 <p>Assuming IInteract is defined as something like</p> <pre><code>interface IInteract&lt;T1, T2&gt; </code></pre> <p>and you are using it for a field of a class Foo:</p> <pre><code>class Foo { List&lt;IInteract...&gt; field; } </code></pre> <p>Then if you want to defer the decision of what types to bind to the IInteract type arguements you need to parameterize the container class:</p> <pre><code>class Foo&lt;T1, T2&gt; { List&lt;IInteract&lt;T1, T2&gt;&gt; field; } </code></pre> <p>The type arguments to IInteract here will be bound when you define a concrete instantiation of the container class, like: <code>var x = new Foo&lt;int, double&gt;().</code> This will cause the IInteract field to be of type <code>IInteract&lt;int, double&gt;</code> for that particular instantiation of the Foo generic type.</p>