I was challenged recently with a question about generics with constraints.
The claim was that it’s only a compile flaw that allows your to declare an interface for a generic type with a constraint. Namely that the syntax
public interface ISomething <T> where T: SomeClass
would pass compilation but would not be useful (runtime) because you can’t declare a variable
ISomething myVar = new ISomething<SomeClass>();
or something to that extent. I went home feeling a bit uneasy about the discussion, then coded this up the way I see it. While it is completely true that you can’t ‘new’ an interface, _using _an interface that has a generic type is completely possible and legal.
Here it is in all it’s g(l)ory.
using System; using System.IO; using System.Text; /// Demo of generic interface declaration with constraint. /// Showing compilation and runtime feasibility. namespaceNH.Demo { classDemo { staticvoidMain(string[] args) { ITryInstance o1 = new GenericInstanceA(); ITry<MyDerivedType> o2 = new GenericInstanceB(); Console.WriteLine("Generic instance 1 " + o1.ProperT.SomeField); Console.WriteLine("Generic instance 2 " + o2.ProperT.SomeField); } }
///<summary> /// this will fail. cosntraint violation /// "The type 'string' must be convertible /// to 'NH.Demo.MyBaseType' in order to use it as /// parameter 'T' in the generic type or /// method 'NH.Demo.ITry<T>'" ///</summary> //interface IFail : ITry<string> { } publicclassGenericInstanceA : ITryInstance { MyDerivedType ITry<MyDerivedType>.ProperT { get { returnnew MyDerivedType("hi there!"); } } }
We use cookies to personalise content, to allow you to contact us, to provide social media features and to analyse our site usage.
Information about your use of our site may be combined by our analytics partners with other information that you’ve provided to them or that they’ve collected from your use of their services.
You consent to our cookies if you continue to use our website.