When working with generics, for example MyThingy<T>, quite often the desire arises to somehow define a set of static methods that can be called on T. For nonstatic methods one can use interface (class MyThingy<T> where T:MyInterface), but this obviously doesn't work with static methods, because an interface cannot define static methods.And for a reason: consider a class MyClass that implements a (hypothetical) interface IExample that defines a static method Method(). How would you call this? There is simply no way, other than calling MyClass.Method(), at which point the advantage of defining the interface is lost, because you need to know the name of the class.However, with the introduction of generic arguments, a mechanism to call such 'static interface methods' suddenly *does* exist. To me, the following code, though currently invalid, could make sense (note that in this example the 'interface' is a generic too; this is just to exemplify the most important application I see (factories), but is not necessary for the principle:interface IFactory<T> {static T Create(string spec);}class FooMaker<T,F> where F: IFactory<T> {public T Generate(string spec) {T t = F.Create(spec); // note the call on F, not an instance of FDoSomethingWith(t);return t;}}I choose to use the keyword 'interface' here, because it is similar in functionality, but I realize that this use may be too different, and another keyword should be choosen. Note that this proposal is rather generic, and could be used as a solution toward a suggestion I proposed before, involving improving the 'new()' constraint: FDBK11721 ( http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=9a8e58ee-1371-4e99-8385-c3e2a4157fd6 ) And also to provide a solution for the suggestion proposed by Ben Monroe in FDBK11253 ( http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=e74396d0-0ec8-465d-b505-9c64cce45d2a ), about operators on generics.