using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Generic
{
class Program
{
static void Main(string[] args)
{
Employees<HR> HREmployees = new Employees<HR>();
HREmployees.Add(new HR { Name = "HREmployee1" });
HREmployees.Add(new HR { Name = "HREmployee2" });
HREmployees.Add(new HR { Name = "HREmployee3" });
HREmployees.Add(new HR { Name = "HREmployee4" });
HREmployees.Add(new HR { Name = "HREmployee5" });
Employees<Developer> DevEmployees = new Employees<Developer>();
DevEmployees.Add(new Developer { dName = "DevEmployee1",platform="Dotnet" });
DevEmployees.Add(new Developer { dName = "DevEmployee2",platform="Java"});
DevEmployees.Add(new Developer { dName = "DevEmployee3",platform="Android"});
DevEmployees.Add(new Developer { dName = "DevEmployee4",platform="IOS"});
DevEmployees.Add(new Developer { dName = "DevEmployee5",platform="Database"});
Console.WriteLine("********************************");
Console.WriteLine(HREmployees.GetFirst().Name);
Console.WriteLine(DevEmployees.GetFirst().dName);
Console.WriteLine(DevEmployees.GetFirst().platform);
}
}
public class Employees<T> where T : class
{
List<T> employees = new List<T>();
public void Add(T item)
{
if (!employees.Contains(item))
employees.Add(item);
}
public T GetFirst()
{
return (employees.Count > 0) ? employees[employees.Count-1] : null;
}
}
public class HR
{
public string Name { get; set; }
}
public class Developer
{
public string dName { get; set; }
public string platform { get; set; }
}
}When creating a generic class, we saw that you can indicate that it would use a parameter type but you are not specifying the type of that parameter. You can put a restriction to indicate how the compiler should deal with the parameter. To create a constraint on a generic class, after the <TypeName> operator, type where TypeName: followed by the rule that the class must follow.
