The C# syntax supports generics that allows you to use classes and methods, which do not specifically declare a type. Instead, the type is passed as a parameter when calling the method or instantiating the class at runtime.
.Net comes with some useful generic classes, such as the
Dictionary, and Unity's own API has some generic functions, which remove the need for some of the verbose casting that would otherwise be necessary in C#.
//with out Generic var someScript : MyScript = (MyScript)GetComponent(typeof(MyScript)); //or using ...