using System.Collections.Generic;
using System.Threading.Tasks;
public static void Main(string[] args)
var fooMethod = typeof(AbstractClass).GetMethod("Foo");
var fooOfBarMethod = fooMethod.MakeGenericMethod(bar);
fooOfBarMethod.Invoke(null, new object[] { new Bar() });
public abstract class AbstractClass
public static void Foo<T>(T item)
Console.WriteLine(typeof(T).Name + ": " + item);
public override string ToString()