On Thu, Jun 14, 2012 at 1:52 PM, Regan Heath <re...@netmail.co.nz> wrote: > On Thu, 14 Jun 2012 10:43:43 +0100, Gor Gyolchanyan > <gor.f.gyolchan...@gmail.com> wrote: > >> On Thu, Jun 14, 2012 at 10:46 AM, Jacob Carlborg <d...@me.com> wrote: >>> >>> UFCS can be used to emulate adding new members/instance methods to a >>> class >>> or struct: >>> >>> class Foo >>> { >>> } >>> >>> void bar (Foo foo, int x) {} >>> >>> auto foo = new Foo; >>> foo.bar(3); >>> >>> Is it possible, somehow, to emulate adding new _static_ methods to a >>> class, >>> something like this: >>> >>> void fooBar (/*something*/, int x) {} >>> >>> Making this possible: >>> >>> Foo.fooBar(4); >>> >>> -- >>> /Jacob Carlborg >> >> >> I'd expect it to look like this: >> >> void fooBar(Foo)(int x) {} > > > That looks too much like a template function to me. What about: > > void fooBar(static Foo, int x) {} > > Note: no parameter name for the "static" Foo parameter (as it's not really a > parameter - simply a placeholder to indicate it's UFCS). > > > C# doesn't have static UFCS (called "extension methods" in C# parlance) tho > some people have wanted it: > http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/8ac0e6bf-c859-4cc4-919f-c80eedfccf63 > > I guess the reason it doesn't exist is that there is no technical reason for > it, all it gives you is a nicer syntax. > > You can get fairly close with a custom static class, static method taking an > instance of the class you want to 'extend'. > > R > > -- > Using Opera's revolutionary email client: http://www.opera.com/mail/
Yes, that does look bad. How about this? void fooBar(T : Foo)(int x) { } -- Bye, Gor Gyolchanyan.