mgravell (64) [Avatar] Offline
#1
using the made-up key:

chapter
> your text ###my highlight###
my thought

---

1
> The world is changing at a ###page### which is sometimes terrifying,
typo

1.2.4
> Dynamic Runtime Library (DLR)
Genuine question (I'm not familiar); is the abbr correct? Dynamic Language Runtime?
Couldn't really find much on either, so I don't claim any knowledge other than it
caught my eye.

2.1.1
> but for this book I will call it the action of the ###delegate###.
you have rigorously otherwise referred to "delegate instance" or "delegate type"
(indeed, remarked as such yourself); should this be delegate instance?

2.1.1
> and when the ###delegate### is invoked,
ditto

2.1.1
> Utter garbage!
given that this chaper is about dispelling myths, it could be interpreted
as though you mean that "the following paragraph is a common misconception,
and the reader should dismiss it"

2.1.1
> You can use BeginInvoke and EndInvoke to invoke a ###delegate### asynchronously,
delegate instance?

2.1.1
> as a chain of ###events### occurring at different times
perhaps an unfortunate term given the context, but I can't think of a better one
jon.skeet (448) [Avatar] Offline
#2
Re: Misc thoughts
Thanks very much for the feedback - it's great to have eagle-eyed readers!

I've changed all but two points:
1) The "utter garbage" - it's only one section (a bit later) which is really about myths. I kinda like the feeling of "utter garbage" but will give it a bit more thought. (I've marked it up in the document.)

2) The "chain of events": yes, I see the issue, but I can't think of better wording either. Again, I'll flag it up and see what I can do.

Please post similar comments, however trivial they may seem!

Jon
mgravell (64) [Avatar] Offline
#3
Re: Misc thoughts
2.5
> (listing 2.5)
You observe that #3 is [q]a little cumbersome[/q]; perhaps space for a more terse #4?

handler = delegate { Console.WriteLine("Also handled anonymously"); };
handler(null, EventArgs.Empty);

This also demonstrates an additional language feature of anonymous methods. You may have covered this later (I'm commenting on my first read)

3
> True[18] story:
Love the footnote ;-p
(aside) Reminds me of the other gem, where something is true*
[* for small values of true]

3.1 [although actually throughout]
> non-private ###fields###
Just an observation that you alternate in terminology between "field" and "instance variable"; this may well be intentional (where "instance variable" precludes static fields). I can't see this causing any confusion at all, but just thought I'd bring it to your attention "in case".
mgravell (64) [Avatar] Offline
#4
Re: Misc thoughts
3.3.1
> that the type argument used has a parameterless constructor. This
public

3.3.1, table 3.2
there's a hanging "1.2"; not sure what it is...
mgravell (64) [Avatar] Offline
#5
Re: Misc thoughts
3.3.1
> any (non-static) class without any explicitly declared constructors,
concrete? an abstract class without an explicit ctor will fail

3.3.1
> and any class with an explicit parameterless constructor
public

3
tables 3.1 thru 3.3 all have hanging 1.1 thru 1.3 - however the tables in other sections don't
jon.skeet (448) [Avatar] Offline
#6
Re: Misc thoughts
1) Delegate with more terse #4: Done, thanks.
(Note to self: must explain that it's really helpful for event handlers:

event EventHandler Foo = delegate { }; // No need for nullity checks now!

2) "True story" - yes, that's one of my favourite bits of the book too.

3) Fields/instance variables. Yes, it's deliberate to avoid using the same word too many times in quick succession. It's a bit annoying as an author that a good thing in general writing style is to use a variety of words, but a good thing in technical discussions is to be consistent in the use of terminology.

Onto the next one...
jon.skeet (448) [Avatar] Offline
#7
Re: Misc thoughts
Parameterless constructors and abstract classes: true. I should also note that it needs to be a *public* parameterless constructor. The text is a bit ugly now, but it's correct:

<quote>
Our final kind of constraint (which is expressed as T : new() and must be the last constraint for any particular type parameter) simply checks that the type argument used has a parameterless constructor which can be used to create an instance. This applies to any value type, any non-static, non-abstract class without any explicitly declared constructors, and any non-abstract class with an explicit public parameterless constructor.
</quote. >

Table 3.2: Odd. I'll let my editor know. It's not in my Word document.