![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx
You know, I've wanted something like this since the mid 80's. :-)
Much nicer (and more OO) than "friend" functions, IMO.
It looks like both WinForms and console .NET executables run under Linux
with mono, too, without recompiling or anything. At least for sufficiently
simple stuff. (Ugly buttons etc on Linux, but that's probably a question of
picking good styling.)
--
Darren New, San Diego CA, USA (PST)
"Ouch ouch ouch!"
"What's wrong? Noodles too hot?"
"No, I have Chopstick Tunnel Syndrome."
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New escreveu:
>
http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx
>
>
> You know, I've wanted something like this since the mid 80's. :-)
> Much nicer (and more OO) than "friend" functions, IMO.
Orcs? no, thanks!
Anyway, good to see C# does not merely milks away Delphi, Java and
Python, but now also Ruby.
http://www.25hoursaday.com/weblog/2008/01/23/C30VsRubyThoughtsOnExtensionMethodsAndOpenClasses.aspx
Yes, it's very useful and dangerous too. Side-effect-full,
dynamically-typed imperative programming to the max! Andrew would
collapse just by looking at it... :)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
I haven't read the whole article yet, only up to the first example, but
am wondering why not just use a new class that inherits the string class
and add an email check function there? I'll finish the article later...
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New wrote:
>
http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx
>
>
> You know, I've wanted something like this since the mid 80's. :-)
> Much nicer (and more OO) than "friend" functions, IMO.
>
> It looks like both WinForms and console .NET executables run under Linux
> with mono, too, without recompiling or anything. At least for
> sufficiently simple stuff. (Ugly buttons etc on Linux, but that's
> probably a question of picking good styling.)
>
Been using C# 3.0 for a while now. Not necessarily "new". That was so
last year ;)
Anyway ... It is a neat feature, and with linq libraries brought in
using 'using', it adds a ton of extensions to just about anything that
implements IEnumberable, which is part of what makes linq work.
Cool feature, but with great power comes great responsibility...
--
~Mike
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Kyle wrote:
> I haven't read the whole article yet, only up to the first example, but
> am wondering why not just use a new class that inherits the string class
> and add an email check function there? I'll finish the article later...
Say, for instance you don't own the class you're extending and the class
is sealed (you can no longer inherit) the function you want to add
doesn't need the internals of the class, but would be convenient if it
were part of the class. Or say you don't want to have to declare all
strings that use your new method as
KylesStuff.Coolthings.KylesCoolString you'd rather keep your existing
codebase, and have this extension available to the new code that will be
using it. Obviously a function that takes a KylesCoolString isn't going
to accept a string, though you could create an implicit conversion, just
to make things easier.
or, you simmply add an extension function to string, and not deal with
the issues surrounding inheritance. The extension function simply acts
as if it was there the whole time. A way of extending a class without
messing with the class or creating a new class, if you will.
--
~Mike
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
nemesis wrote:
> Orcs? no, thanks!
I think "Orca" is the code name for C# 2008 back in 2007. :-)
> Anyway, good to see C# does not merely milks away Delphi, Java and
> Python, but now also Ruby.
Yep! Except doing it with a strongly-typed component-friendly approach. :-)
You always could do it in Smalltalk, just like you do in Ruby. One advantage
C# has is that you're not *actually* changing the string class; it's just
syntactic sugar. It's more like a C++ friend, except with method/object syntax.
And if one library writes an "In()" function for collections, and another
library writes an "In()" function for collections, there's no collision.
The problem with doing it in Smalltalk (or Ruby for that matter, I suspect)
is that you wind up horking up any libraries that might have conflicts, and
you wind up with workspaces that that can't share code. (Indeed, the whole
"workspace" concept in Smalltalk seems like a bad idea in hindsight, or at
least extremely hard to manage in spite of all the help the environment
gives you. :-)
--
Darren New, San Diego CA, USA (PST)
"Ouch ouch ouch!"
"What's wrong? Noodles too hot?"
"No, I have Chopstick Tunnel Syndrome."
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Kyle wrote:
> I haven't read the whole article yet, only up to the first example, but
> am wondering why not just use a new class that inherits the string class
> and add an email check function there?
Because every function that currently returns a string doesn't have your
extra code added. Every read from a file, every concatenation of two
strings, every string literal, every element on a web page, every attribute
from an XML file, every packet from a socket: all need to get converted to
your type before you can use them.
The "email check" function might be a poor example.
Think of a "point" object, where you want to be able to calculate the
distance, for example. Now you have rectangles holding points, windows
holding rectangles, etc., and you have extra syntax to turn the points in
the rectangles in the windows into MyPoint objects, just so you can apply
the method. Or using a separate function unrelated to points and which
doesn't show up in intelisense.
Plus, of course, that doesn't work if for some reason you can't inherit from
the object, like it being an integer or something.
--
Darren New, San Diego CA, USA (PST)
"Ouch ouch ouch!"
"What's wrong? Noodles too hot?"
"No, I have Chopstick Tunnel Syndrome."
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Mike Raiford wrote:
> Been using C# 3.0 for a while now. Not necessarily "new". That was so
> last year ;)
Well, I haven't been using C# lately, so....
Too many people want Linux crap, and think they really *need* C++ to go as
fast as possible, in spite interfacing to a MySQL server or some silliness.
> Anyway ... It is a neat feature, and with linq libraries brought in
> using 'using', it adds a ton of extensions to just about anything that
> implements IEnumberable, which is part of what makes linq work.
Cool. Any recommendations on good books for the stuff in C# 3 that's not in
C# 2? Lots of books, but hard to evaluate. :-) Any you found particularly
good or bad?
--
Darren New, San Diego CA, USA (PST)
"Ouch ouch ouch!"
"What's wrong? Noodles too hot?"
"No, I have Chopstick Tunnel Syndrome."
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New wrote:
> Mike Raiford wrote:
>> Been using C# 3.0 for a while now. Not necessarily "new". That was so
>> last year ;)
>
> Well, I haven't been using C# lately, so....
>
> Too many people want Linux crap, and think they really *need* C++ to go
> as fast as possible, in spite interfacing to a MySQL server or some
> silliness.
>
I had to tease, though ... :)
>
> Cool. Any recommendations on good books for the stuff in C# 3 that's not
> in C# 2? Lots of books, but hard to evaluate. :-) Any you found
> particularly good or bad?
>
I haven't actually done a whole lot of reading, except for the
documentation and online resources and working with it. There was a book
being passed around here (Pro LINQ) that some people said was rather
good, but I hadn't had a chance to look at it yet.
--
~Mike
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New wrote:
>
http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx
>
Funny to see a post titled "*new* C# stuff" with a link to a March 2007 blog
post :)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |