Re: Extending System.Drawing.Rectangle...
Chris Anderson <[email protected]>
| Newsgroups | gmane.comp.windows.devel.dotnet.winforms |
|---|---|
| Message-ID | <[email protected]> |
Good point, I forgot about conversion operators.
FWIW in C# it would be something like :
public static implicit operator Rectangle (RectangleEx r) {...}
public static implicit operator RectangleEx (Rectangle r) {...}
or
public static explicit operator Rectangle (RectangleEx r) {...}
public static explicit operator RectangleEx (Rectangle r) {...}
You could use implicit in this case as no member vars are being added
(and so all Rectangles are compatible with all RectangleExs), allowing
code like this to be used:
RectangleEx rex = new RectangleEx(1,2,3,4);
Rectangle r = rex; //no casting required!
In the case of a class I wouldn't like it (because it looks like you
have two references to the same instance, whereas you actually have
created a new instance - they are called conversion operators for a
reason), but with a struct you *know* that rex and r are not the same
"instance", so it's not hiding anything.
Nice idea, Dave!
(BTW I don't know about VB support, but IIRC this ability was in C#
since 1.0 :) )
Chris
> -----Original Message-----
> From: Discussion forum for developers using Windows Forms to build
apps
> and controls [mailto:[email protected]] On Behalf Of
> Dave
> Sent: 20 April 2007 00:46
> To: [email protected]
> Subject: Re: [DOTNET-WINFORMS] Extending System.Drawing.Rectangle...
>
> Uh?
>
> What about just casting the object from one to the other, with a cast
> operator? Don't need 3.0 to do that... Although you need 2.0 to make
> it
> clean, it's pretty easy with 1.0-1.1 with functions like ToRectangle()
> and
> ctor(Rectangle)
>
> Try that:
> (And if you're not comfortable with VB, think of Reflector...)
>
> Public Structure RectangleEx
<snip>
>
> Public Shared Narrowing Operator CType(ByVal item As RectangleEx)
> As
> Rectangle
> Return New Rectangle(item.X, item.Y, item.Width, item.Height)
> End Operator
>
> Public Shared Widening Operator CType(ByVal item As Rectangle) As
> RectangleEx
> Return New RectangleEx(item.X, item.Y, item.Width,
item.Height)
> End Operator
> End Structure
>
> Have fun!
>
> Dave.
> www.omniscienttrader.com
> www.omniscient.ca
>
>
> -----Original Message-----
> From: Discussion forum for developers using Windows Forms to build
apps
> and
> controls [mailto:[email protected]] On Behalf Of
> Chris
> Anderson
> Sent: April 18, 2007 2:28 AM
> To: [email protected]
> Subject: Re: [DOTNET-WINFORMS] Extending System.Drawing.Rectangle...
>
> You'd probably need to wrap the Rectangle inside a new class and
> internally
> use the Rectangle to perform standard Rectangle functionality, tgen
add
> what
> you want.
> Of course you wouldn't be able to use the new class *as* a Rectangle
> where a
> Rectangle was expected.
>
> In .net 3.0 you *might* be able to use extension methods. ( not 100%
> sure if
> you can use them on structs, but worth checking)
>
> What extra functionality are you looking to add?
>