using System; static class Program { public interface I1 { string Id { get; } } public class BaseClass { public int Id { get { return 4; } } } public class Derived : BaseClass, I1 { public new string Id { get { return "aa"; } } } static void Generic (T item) where T : BaseClass, I1 { if (item.Id != 4) throw new Exception ("Doom!"); } static void Main () { Generic (new Derived ()); } }