No tak, i nie.
Możesz, jak Steve zasugerował, stworzyć kolejny, trzeci interfejs, który opada z dwóch, które chcesz, i użyć go dla typu parametru.
Jednak będzie to również wymagać, aby używana klasa implementowała również trzeci interfejs.
Innymi słowy, to nie będzie działać:
public interface I1 { }
public interface I2 { }
public class C : I1, I2 { }
public interface I3 : I1, I2 { }
public class YourClass
{
public void Test(I3 i) { }
}
...
YourClass yc = new YourClass();
C c = new C();
yc.Test(c); // won't work, C does not implement I3
można jednak oszukać kompilator do tego, co chcesz w drodze generycznych.
public class YourClass
{
public void Test<T>(T i) where T: I1, I2 { }
}
Teraz będzie działać. Nadal nie jestem w 100% pewny, że nie dam ci jeszcze innych problemów, musiałbym o tym pomyśleć.
Można użyć [tej samej sztuczki, co w przypadku deklarowania zmiennej składowej] (http://stackoverflow.com/a/4940249/429091), chociaż to podejście wymaga implementacji klas w celu włączenia wzorca. – binki