using System; public class Test { interface ITest { } class ServiceBase { public Channel InnerChannel { get; } } class Channel { } interface IMyBase { Channel MyInnerChannel { get; } } class ServiceClient : ServiceBase, IMyBase { public string Data { get; set; } public Channel MyInnerChannel { get { return base.InnerChannel; } } } static string GetFoo2() { return Execute((ServiceClient clnt) => clnt.Data); } static TResult Execute(Func fnc) where TService : /*ServiceBase,*/ IMyBase, /*IDisposable,*/ new() { TService service = new TService(); Channel channel = service.MyInnerChannel; return default(TResult); } public static void Main() { Test.GetFoo2(); } }