How does compiler combine an executable project using generic parameterized types from another class library project?
<p>Assume I have a class library project name <strong>Utilities.dll</strong> as follows:</p>

<pre><code>public static class Utilities
{
    public static T Min&lt;T&gt;(T[] data) where T : IComparable&lt;T&gt;
    {
        T min = data[0];
        foreach (T x in data)
        {
            if (x.CompareTo(min) &lt; 0)
                min = x;
        }
        return min;
    }
}
</code></pre>

<p>Then I create a new console app project <strong>Tester.exe</strong> referencing Utilities.dll as follows</p>

<pre><code>class Program
{
    static void Main(string[] args)
    {
        int[] data = { 3, 2, 4, 5, 1, 0, -1, 10 };

        Console.WriteLine(Utilities.Min&lt;int&gt;(data));
    }
}
</code></pre>

<p>I want to know how the compiler does its job behind the scene. Can anybody know the rough idea about it?</p>

<p>Note that: Assume I have no access to the source code of Utilities.dll when using it on Tester.exe project. Only Utilities.dll is provided.</p>
