An interface is just a guarantee that the class implements the properties\methods on the interface, there is nothing stopping the class using other properties and methods though. So I'd reduce your IPrinter interface to just the Print method.
interface IPrinter
{
void Print();
}
public class EthernetPrinter : IPrinter
{
public string IPAddress { get; set; }
public void Print() { Console.WriteLine("Printing over ethernet"); }
}
public class SerialPrinter : IPrinter
{
public int CommPort { get; set; }
public void Print() { Console.WriteLine("Printing serially"); }
}
Your existing code will still work
IPrinter printer;
if (someSetting == "UseEthernet")
printer = new EthernetPrinter() { IPAddress = "1.1.1.1" };
else
printer = new SerialPrinter() { CommPort = 1 };
printer.Print();
As for your "if" method, if you google the factory pattern that will show you how you can deal with that. You'll still have the "if" but it will be hidden inside a factory class which will leave your main code looking cleaner.