In c# what does 'where T : class' mean?

前端 未结 10 1943
太阳男子
太阳男子 2020-11-29 18:53

In C# what does where T : class mean?

Ie.

public IList DoThis() where T : class
相关标签:
10条回答
  • 2020-11-29 19:10

    It's a type constraint on T, specifying that it must be a class.

    The where clause can be used to specify other type constraints, e.g.:

    where T : struct // T must be a struct
    where T : new()  // T must have a default parameterless constructor
    where T : IComparable // T must implement the IComparable interface
    

    For more information, check out MSDN's page on the where clause, or generic parameter constraints.

    0 讨论(0)
  • 2020-11-29 19:13

    It is called a type parameter constraint. Effectively it constraints what type T can be.

    The type argument must be a reference type; this applies also to any class, interface, delegate, or array type.

    Constraints on Type Parameters (C# Programming Guide)

    0 讨论(0)
  • 2020-11-29 19:14

    T represents an object type of, it implies that you can give any type of. IList : if IList s=new IList; Now s.add("Always accept string.").

    0 讨论(0)
  • 2020-11-29 19:18

    where T: class literally means that T has to be a class. It can be any reference type. Now whenever any code calls your DoThis<T>() method it must provide a class to replace T. For example if I were to call your DoThis<T>() method then I will have to call it like following:

    DoThis<MyClass>();
    

    If your metthod is like like the following:

    public IList<T> DoThis<T>() where T : class
    {
       T variablename = new T();
    
       // other uses of T as a type
    
    }
    

    Then where ever T appears in your method, it will be replaced by MyClass. So the final method that the compiler calls , will look like the following:

    public IList<MyClass> DoThis<MyClass>() 
    {
       MyClass variablename= new MyClass();
    
      //other uses of MyClass as a type
    
      // all occurences of T will similarly be replace by MyClass
     }
    
    0 讨论(0)
  • 2020-11-29 19:18

    Here T refers to a Class.It can be a reference type.

    0 讨论(0)
  • 2020-11-29 19:21

    Simply put this is constraining the generic parameter to a class (or more specifically a reference type which could be a class, interface, delegate, or array type).

    See this MSDN article for further details.

    0 讨论(0)
提交回复
热议问题