I should probably note at this point that "where" is a contextual
keyword - the same as "get", "put", and "value". All the enhancements
we're doing in 2.0 use contextual keywords (though the PDC bits use
yield, which is non-contextual, and will change to "yield return" in the
final version).

That means that we don't have to burn any identifiers, nor do we have to
munge your code on migration.  

-----Original Message-----
From: Moderated discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED] On Behalf Of Daniel
O'Connell
Sent: Thursday, October 23, 2003 3:26 PM
To: [EMAIL PROTECTED]
Subject: Re: [ADVANCED-DOTNET] C# generics constraints syntax

I think convoluting the syntax is a much worse choice than adding a new
keyword. Adding ontop of that the chances of error (<T: (Bar, Bax,
new(), S> which is incorrect and is an easy mistake to make). I don't
know how specific constructor constraints can get, but having a whole
list of them would make it very easy to not realize you didn't close the
matching (.
I find it much cleaner to do, assuming inheritance:

public class Dictionary<T,S> : IEnumerable where T : Bar, Bax, new()
where S : IComparable, new()

compared to something like

public class Dictionary<T : (Bar, Bax, new()), S : (IComparable, new())>
:
IEnumerable
or
public class Dictionary<T : Bar & Bax & new(), S : IComparable & new()>
:
IEnumerable

(of the two, I prefer the latter actually)

The C# syntax as it currently stands is simpler in my mind, probably
understandable to an extent for amateurs, its easy determine what
constraint is on what member, and there are no paranthetical screwups
that could get in the way. It also makes figuring out what Dictionary
derives from and what the constraints are, just by looking for the : and
where keywords, instead of having to do a full fledged mind-parse.

I am not a huge fan of the where clause, but I don't think the other
syntaxes suggested solve the biggest underlying problem, which basically
is that generics make class declarations much larger, especially as the
argument list starts to grow. Imagine 7 or 8 type arguments with
constraints, unlikely as it may be, with ANY existing syntax...doesn't
look pretty does it?


----- Original Message -----
From: "Thong (Tum) Nguyen" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, October 23, 2003 4:46 AM
Subject: Re: [ADVANCED-DOTNET] C# generics constraints syntax


> I think something along the lines of
>
> <T : (Bar, Bax), S> would be a reasonable alternative to the "where"
clause.
>
> ^Tum
>
> > -----Original Message-----
> > From: Moderated discussion of advanced .NET topics. 
> > [mailto:ADVANCED- [EMAIL PROTECTED] On Behalf Of Dominic 
> > Cooney
> > Sent: Thursday, 23 October 2003 1:27 p.m.
> > To: [EMAIL PROTECTED]
> > Subject: Re: [ADVANCED-DOTNET] C# generics constraints syntax
> >
> > FWIW, the design of the Java language has gone in the other 
> > direction;
the
> > syntax is: Foo<T extends Bar, U extends Baz>. I am not sure how 
> > multiple constraints are specified (T extends Bar & Baz, IIRC).
> >
> > What is VB.NET doing?
> >
> > Dominic Cooney
> >
> > -----Original Message-----
> > From: Moderated discussion of advanced .NET topics.
> > [mailto:[EMAIL PROTECTED] On Behalf Of Daniel
O'Connell
> > Sent: Thursday, 23 October 2003 9:05 AM
> > To: [EMAIL PROTECTED]
> > Subject: Re: [ADVANCED-DOTNET] C# generics constraints syntax
> >
> > I'd say readability first, personally. It'd be alot easier to read
> >
> > public class Dictionary<KeyType,ValType> where KeyType : 
> > IComparable, ICollection, IAnotherThing, ValueType : IComparable, 
> > IDictionaryValue, IAnotherRestriction
> >
> > than
> > public class Dictionary<KeyType : IComparable, ICollection,
IAnotherThing,
> > ValueType : IComparable, IDictionaryValue, IAnotherRestriction>;
> >
> > Beyond that, I imagine parsing is easier this way. It would be tough

> > to determine what the second type name is, should it be named 
> > ICollection, IAnotherThing, ValueType, etc?
> >
> > ----- Original Message -----
> > From: "Thong (Tum) Nguyen" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Wednesday, October 22, 2003 5:50 PM
> > Subject: [ADVANCED-DOTNET] C# generics constraints syntax
> >
> >
> > > Hey folks,
> > >
> > > Can anyone think of a reason why the constraints syntax is this:
> > >
> > > public class Dictionary<KeyType, ValType> where KeyType : 
> > > IComparable
> > >
> > > rather than this:
> > >
> > > public class Dictionary<KeyType : IComparable, ValType>
> > >
> > > ?
> > >
> > > The former adds an additional (unreserved?) keyword to the 
> > > language
and
> > > locates two related things apart from each other (the generic
parameter
> > &
> > > its constraint).
> > >
> > > There's probably a good reason I've overlooked.
> > >
> > > All the best,
> > >
> > > ^Tum
> > >
> > > ===================================
> > > This list is hosted by DevelopMentorR  http://www.develop.com NEW!

> > > ASP.NET courses you may be interested in:
> > >
> > > 2 Days of ASP.NET, 29 Sept 2003, in Redmond 
> > > http://www.develop.com/courses/2daspdotnet
> > >
> > > Guerrilla ASP.NET, 13 Oct 2003, in Boston 
> > > http://www.develop.com/courses/gaspdotnet
> > >
> > > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
> > ===================================
> > This list is hosted by DevelopMentorR  http://www.develop.com NEW! 
> > ASP.NET courses you may be interested in:
> >
> > 2 Days of ASP.NET, 29 Sept 2003, in Redmond 
> > http://www.develop.com/courses/2daspdotnet
> >
> > Guerrilla ASP.NET, 13 Oct 2003, in Boston 
> > http://www.develop.com/courses/gaspdotnet
> >
> > View archives and manage your subscription(s) at 
> > http://discuss.develop.com
> >
> > ===================================
> > This list is hosted by DevelopMentor.  http://www.develop.com NEW! 
> > ASP.NET courses you may be interested in:
> >
> > 2 Days of ASP.NET, 29 Sept 2003, in Redmond 
> > http://www.develop.com/courses/2daspdotnet
> >
> > Guerrilla ASP.NET, 13 Oct 2003, in Boston 
> > http://www.develop.com/courses/gaspdotnet
> >
> > View archives and manage your subscription(s) at 
> > http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com NEW! 
> ASP.NET courses you may be interested in:
>
> 2 Days of ASP.NET, 29 Sept 2003, in Redmond 
> http://www.develop.com/courses/2daspdotnet
>
> Guerrilla ASP.NET, 13 Oct 2003, in Boston 
> http://www.develop.com/courses/gaspdotnet
>
> View archives and manage your subscription(s) at
http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com NEW!
ASP.NET courses you may be interested in:

2 Days of ASP.NET, 29 Sept 2003, in Redmond
http://www.develop.com/courses/2daspdotnet

Guerrilla ASP.NET, 13 Oct 2003, in Boston
http://www.develop.com/courses/gaspdotnet

View archives and manage your subscription(s) at
http://discuss.develop.com

===================================
This list is hosted by DevelopMentorŪ  http://www.develop.com
NEW! ASP.NET courses you may be interested in:

2 Days of ASP.NET, 29 Sept 2003, in Redmond
http://www.develop.com/courses/2daspdotnet

Guerrilla ASP.NET, 13 Oct 2003, in Boston
http://www.develop.com/courses/gaspdotnet

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to