Why do we need virtual interfaces in system verilog?

In reply to mseyunni:

Responding to seyunni, you can easily drive a module wire from within a task member of a class as follows

task drive();
@(posedge clk)
dut.signal <= 1;

without needing any virtual interface.

As Dave pointed out earlier, you dont want hierarchical references in your class based tb for reasons he mentioned.

Also mentioned is that vi provides runtime binding, i.e. connections can be made and broken (only to be remade again) at run time (I rarely do). 'defines will fall short.

Soummya