// here I try to utilize the Stack class public void UseStack(Stack stack) { // what type should I use for the variable to hold the result of the Stack.Pop method? type ??? item = stack.Pop(); // if I use IEquatable IEquatable item1 = stack.Pop(); IEquatable item2 = stack.Pop(); item1.Equals(item2); // then I can do this Type itemType = item1.GetType(); // but I can't do this string s = item1.ToString(); // nor can I do this // Ok, this calls for another interface that composes all of these other interfaces into one }