Warum wird bei einer generischen <T> -Methode mit einer Einschränkung "where T: class" eine Schnittstelle akzeptiert

Ich habe dasinterface:

public interface ITestInterface
{
    int TestInt { get; set; }
}

und diese generische Methode (mit einemT : class Einschränkung):

public void Test<T>() where T : class
{
    // DoSomething
}

und dieser Aufruf:

Test<ITestInterface>();

und alles wird kompiliert und ausgeführt, während eininterface ist nich a class (oder ist es?)

Warum passiert das

Ich habe das zum ersten Mal in meiner WCF-Proxy-Klasse gesehen:

public partial class TestServiceClient:
     System.ServiceModel.ClientBase<TestNamespace.ITestService>, TestNamespace.ITestService

woClientBase<T> hat diese Definition:

public abstract class ClientBase<TChannel> : 
     ICommunicationObject, IDisposable where TChannel : class

Antworten auf die Frage(2)

Ihre Antwort auf die Frage