When declare a generic class or method the type parameter can be limited to what types it can take using constraints. So in my solution the row:
public static TWebService CreateWebService
where TWebService : SoapHttpClientProtocol
means that TWebService must be of SoapHttpClientProtocol type.
However i ran into a bit of confusion when i wanted to instantiate TWebService. The compiler was not happy when i wrote:
// This won't compile
TWebService t = new TWebService();
That is until i discovered another constraint - the Constructor Constraint. By using this constraint you can constrain the types that is allowed to types with an empty (parameterless) constructor. And that will allow you to instantiate TWebService and the compiler will find the right constructor at runtime.
So here's the syntax:
public static TWebService CreateWebService
where TWebService : SoapHttpClientProtocol, new()
{
// This will be ok
TWebService t = new TWebService();
}
Much nicer code without the previous delegate solution.
No comments:
Post a Comment