در سی شارپ شما می توانید نوع (type) ها را در قالب یک متغییر برگرداند و جا به جا کرد. این نوع ها می توانند انواع متغیر ها و یا کلاس ها و در کل هر شئ موجود باشند. به طور مثال اگر کلاس های مشتقی دارید می تواند کلاس پایه و تمامی کلاس های مشتق را به گونه ای بنویسید که توع خود را در غالب یک متغیر اعلام کنند مثال:

 

در مثال بالا یک (property) با نام TypeOfMe از نوع type تعریف شده شده که نوع کلاس را به عنوان مقدار خود بر می گرداند. البته باید توجه داشت که این تنها متغیری است که می توان مقدار آن را برای شرط ها و ... استفاده کرد و نمی توان از آن برای تعریف متغیر های دیگر از همین نوع استفاده کرد.

type TypeOfMe {get=>typeof(this);}

به نمونه کد زیر توجه کنید:

public T MultiConditionValue<T> (Bool[] Conditions,T ElseValue, parms T[] Values){
    for(int i=0;i<Conditions.Length;i++)
        if(Conditions[i]) return Values[i];
    return ElseValue;
}

در کد بالا به جای تعریف نوع توسط خودمان از حرف T استفاده شده و به برنامه نویس اجازه می دهد تا نوع ورودی و خروجی را خودشان تعریف کنند. برای تفسیر کد بالا نیز باید بگویم این کد یک آرایه از مقادیر منطقی دریافت می کند که با توجه به مقادیر آن با رسیدن به اولین مقدار درست مقدار معادل آن را بر می گرداند و در صورتی که هیچ مقداری صحیح نبود مقدار ElseValue را بر می گرداند. در واقع این کد معادل چند شرطی، چند مقداریِ عبارت مقابل است: (مقدار شرطی : condition ? trueValue:falseValue).

البته شما مختارید از نام های دیگری به جای حرف T استفاده کنید و همچنین هر چند تایی که دلتون می خواد به کار بگیرید!

public outputType Example<inputType,outputType> (inputType input) {...}