using System; static class Test1 { public interface IOp<T> { T Func(uint v); } public struct Op : IOp<ushort>, IOp<uint> { ushort IOp<ushort>.Func(uint v) { return (ushort )(v * 2); } uint IOp<uint>.Func(uint v) { return v * 4; } } static void Foo<T,OP>(uint v) where T:struct where OP : IOp<T> { OP op = default(OP); System.Console.WriteLine( op.Func(v) ); } static public void Main() { Foo<ushort, Op>(100); Foo<uint, Op>(100); } };