Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the term "Naked type constraint" refer to?

Recently I have read a term "naked type constraint" in the context of Generics. What does it mean? Where do we use it?

like image 645
user196546 Avatar asked Nov 13 '09 16:11

user196546


2 Answers

From MSDN:

Constraint          Description

where T : U         The type argument supplied for T must be or derive from
                    the argument supplied for U. This is called a naked type
                    constraint.

When a generic type parameter is used as a constraint, it is called a naked type constraint. Naked type constraints are useful when a member function with its own type parameter has to constrain that parameter to the type parameter of the containing type, as shown in the following example:

class List<T>
{
    void Add<U>(List<U> items) where U : T {/*...*/}
}
like image 196
dtb Avatar answered Oct 27 '22 04:10

dtb


As an aside, it is bizarre to me that this somewhat salacious term managed to make it into the MSDN documentation. We certainly do not call these constraints "naked type constraints" on the C# compiler team and I was shocked, shocked! to discover a few years back that this is what the documentation said. We usually call them "type parameter constraints". I have no idea how this term got into the documentation in the first place; there's probably an interesting story there.

like image 32
Eric Lippert Avatar answered Oct 27 '22 03:10

Eric Lippert