Sounds like a question for Jon Skeet or the like, but I'll take a shot at it anyway.
The implicit operator you have described would largely just be unnecessary. If Effect
already implements IEffect
, you can use an Effect
anywhere you need an object implementing IEffect
without bothering with a user-defined conversion.
The explicit operator issue may be a little more philosophical. My understanding is that the point of the implicit and explicit conversions is to convert an object of one type to an object of another type whose relationship is not already obvious to the compiler for some reason. An interface is not, however, an object. One cannot instantiate an interface directly; rather, the interface needs to be implemented by some class. When you use either the implicit or explicit conversions, the resulting object is not associated by type to the prior object. That means that the object resulting from the conversion needs to be able to stand independently and have an actual object type, which an interface by itself does not.
Perhaps more directly: What would be the concrete type of the result of the implicit conversion? The compiler has no way of knowing, so it cannot instantiate the object.
If you really need to do something like this, you would want to create an abstract base class that implements the interface. You should then be able to "convert" to and from the abstract base class, which does have an object type.