Generic Constraints pada bahasa pemrograman C#
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 classTodoListwhere 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 TodoListwhere 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 TodoListwhere 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 TodoListwhere 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 (); } }