Generic Constraints pada bahasa pemrograman C#

Generic Constraints pada bahasa pemrograman C# | IDCSharp
Generic Constraints pada bahasa pemrograman C# | IDCSharp

Constraint merupakan suatu Validasi yang dapat kamu berikan pada Parameter bertipe Generic.

Berikut adalah beberapa tipe dari Constraint, setiap Constraint dimulai dengan Syntax ( where T : )

  • struct  – Argument Harus bertipe Value
  • class – Argument Harus bertipe Reference
  • new() – harus memiliki Constructor tanpa parameter public.
  • <base class> – Argument harus diwarisi dari <base class>.
  • <interface> –  Argument harus diimplementasikan dari interface
  • U – Argument T harus diwarisi dari Argument U.

Where T : Struct.

Didalam Struct Constraint, kamu hanya bisa membuat argument bertipe Value. contoh :

TodoList < int > li = new TodoList< int >();    
TodoListlst2 < string > li2 = new TodoList< string >();

Pada kode diatas, tipe string akan mendapatkan error, kenapa ?.

Karena Tipe String bukan merupakan Value Tipe, melainkan Reference Tipe.

Where T : Class

Berbalikan dengan Where T:Struct, Where T:Class diharuskan argument bertipe Reference. beberapa diantaranya yang bertipe reference adalah : string, class dan delegasi.

public class TodoList < T > where T : class
{
}
TodoList < int > li = new TodoList < int >();
TodoList < string > li = new TodoList < string >();        
TodoList < EventHandler > li2 = new TodoList < EventHandler >();   

Pada kode diatas, tipe int akan mendapatkan error, Karena Tipe int adalah berupa Value Type.

Where T : new()

Berbeda dengan sebelumnya yang mana validasinya berdasarkan tipe argument Reference ataupun Value.

Where T:new(), memvalidasi argumentnya diharuskan memiliki Constructor tanpa parameter public.

public classTodoList where T : new()
{
}
    class Program
    {
        static void Main(string[] args)
        {
TodoList idcs = new TodoList(); 
TodoList CategoryTodos = newTodoList();
             
        }
    }
 
public class Idcs
{
    public Idcs()
    {
 
    }
}
 
public class Category
{
    public Category(string CategoryName)
    {
 
    }
}

Pada Kode diatas, akan terjadi error pada Argument Category, karena argument Category mempunyai parameter CategoryName.

where T : <base class>

Pada Where T:<base clase>, Argument harus diwarisi dari <base class>.

public class TodoList where T : Idcsharp
{
}
public class Idcsharp
{
}
 
public class Idcs : Idcsharp
{
}
 
public class Category
{
}
 
class Program
{
    static void Main(string[] args)
    {
        TodoList idc = new TodoList(); 
 
        TodoList cat = new TodoList(); 
    }
}

Pada program di atas, akan terjadi error pada Category, kenapa ? karena status Categori tidak inherit atau mengambil warisan dari Base Class ( Idcsharp ).

where T : <interface>

argument harus mengimplementasikan Interface.

public class TodoList where T : Idcsharp
{
}
 
public interface Idcsharp
{
}
 
public class Category : Idcsharp
{
}
 
public class Member
{
}
  
class Program
{
    static void Main(string[] args)
    {
        TodoList cat = new TodoList(); 
 
        TodoList mem = new TodoList(); 
    }
}

Where T : U

where T : U, merupakan Constraint yang mana ada 2 argument, yaitu T dan U, dan U dapat berupa interface, abstract, ataupum Class biasa. sedangkan T harus diwarisi atau mengambil warisan dari U.

public class TodoList where T : U
{
    public void ContohAja(T subClass, U baseClass)
    {
 
    }
}
 
public interface Idcsharp
{
}
 
public class Member : Idcsharp
{
}
 
class Program
{
    static void Main(string[] args)
    {
        TodoList MemberNodes = new TodoList();
    }
}