简体   繁体   中英

Generic constraint: Enforce type to have static function and constructor with parameters

I know you can write:

class GenericClass<T> where T : new()
{ 

}

to enforce that T has an empty constructor.

My Qs are :

  1. can you enforce that T has a constructor with a specific type of parameter? Like:

     class SingletonFactoryWithEmptyConstructor<T> where T : new(int) 
  2. can you enforce that T has a static function (let's say, void F() ) so that you can use this function inside the generic class? Like :

     class GenericClass<T> where T : void F() { void G () { TF(); } } 

    I know you can specify that T implements an interface but I don't want that. I want to specify that T has a static function.

No, there's nothing like this in C#.

I've previously suggested that "static interfaces" could express this reasonably neatly. They'd only be useful for generic type constraints (I suspect, anyway) but then you could express:

  • Constructors with arbitrary parameters
  • Static methods and properties
  • Operators

The last of these points is particularly interesting in my view, allowing things like a generic "Average" method over numeric types with suitable addition and division operators.

I believe some folks at MS have thought about something similar, but I haven't heard anything to suggest they're actively working on it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM