On Thu, 24 Sep 2009 11:53:13 -0400, Jeremie Pelletier <[email protected]> wrote:

Steven Schveighoffer wrote:
The Tango lib used to define Input and Output streams independent of Seekable streams (there was a Seek interface which was applied separately to an input/output implementation class). But what ends up happening is that it was unwieldly to use streams in cases where seeking is used, because you have to dynamic-cast to the seek interface to determine if seeking is available.

interface ISeekableInputStream : IInputStream, ISeekableStream {}

You'd think this works well, but it still doesn't cut it. There are about a dozen filter classes in tango that would have to have seekable and non-seekable versions. This was the original problem (that you couldn't seek the filter classes).

Covariant arguments is something you're gonna come across at some point or another. Having language support for it does not make it the rule, but a convenience for the exception.

Having language support makes it not an exception, even if it's not the rule. The reason it's not automatic is because the language designer wants you to know "hey, you're doing something that isn't cheap." Just silently allowing it makes for code that too easily can call multiple dynamic casts every time you call a method.

-Steve

Reply via email to