I'm having a hard time everytime i look at SharpDX code and try to follow DirectX documentation. Is there a place where what each of the numbered classes map to and why they exist is clearly laid out?

I'm talking about things like : 

```
            DXGI.Device
            DXGI.Device1
            DXGI.Device2
            DXGI.Device3
            DXGI.Device4

            SharpDX.Direct3D11.Device
            SharpDX.Direct3D11.Device1
            SharpDX.Direct3D11.Device11On12
            SharpDX.Direct3D11.Device2
            SharpDX.Direct3D11.Device3
            SharpDX.Direct3D11.Device4
            SharpDX.Direct3D11.Device5

            SharpDX.Direct3D11.DeviceContext
            SharpDX.Direct3D11.DeviceContext1
            SharpDX.Direct3D11.DeviceContext2
            SharpDX.Direct3D11.DeviceContext3
            SharpDX.Direct3D11.DeviceContext4

```

Everytime i start from code i find it seems to be picked by black magic and i have no idea where to go from there, for example i'm using this (from code i found) and i have no idea why it's device3, factory 3 going with swapchain1 on which we queryinterface swapchain2 : 

```
        using (DXGI.Device3 dxgiDevice3 = this.device.QueryInterface<DXGI.Device3>())
        using (DXGI.Factory3 dxgiFactory3 = dxgiDevice3.Adapter.GetParent<DXGI.Factory3>())
        {

            DXGI.SwapChain1 swapChain1 = new DXGI.SwapChain1(dxgiFactory3, this.device, ref swapChainDescription);
            this.swapChain = swapChain1.QueryInterface<DXGI.SwapChain2>();
        }

```

If full explanation is too large of a the scope of an answer here any link to get me started on figuring out what C++ DX maps to which numbered object and why is most welcome.

In case this matters i'm only interested in DX >= 11, and i'm using SharpDX within an UWP project.