<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx</link><description>Generics is a new feature added to the Whidbey CLR and languages. We are still learning the best way to take advantage of the feature in reusable library APIs. The guidelines below represent out current thinking in this area. 1.0 Generics A new feature</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#89888</link><pubDate>Mon, 15 Mar 2004 21:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:89888</guid><dc:creator>Thomas Tomiczek</dc:creator><description>Gratulations.&lt;br&gt;&lt;br&gt;What a long post on something that is totally irrelevant for everyone (besides very frew EAP&lt;br&gt;'s) for another year.&lt;br&gt;&lt;br&gt;May I suggest you push for a faster release :-)</description></item><item><title>New Blogger on Framework Design Guidelines</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#89901</link><pubDate>Mon, 15 Mar 2004 22:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:89901</guid><dc:creator>Brad Abrams </dc:creator><description /></item><item><title>New Design Guideline: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#89903</link><pubDate>Mon, 15 Mar 2004 22:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:89903</guid><dc:creator>Brad Abrams </dc:creator><description /></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#89908</link><pubDate>Mon, 15 Mar 2004 22:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:89908</guid><dc:creator>Jeff</dc:creator><description>Good post... though a little long. The examples you give at the start are perhaps the best I've seen explaining what generics are.</description></item><item><title>Some helpful Generics guidelines</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#90012</link><pubDate>Tue, 16 Mar 2004 00:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:90012</guid><dc:creator>ShowUsYour</dc:creator><description /></item><item><title>[.NET]Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#90088</link><pubDate>Tue, 16 Mar 2004 02:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:90088</guid><dc:creator>おがわみつぎのBLOG</dc:creator><description>[.NET]Design Guidelines Update: Generics</description></item><item><title>Generics design guidelines</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#90138</link><pubDate>Tue, 16 Mar 2004 04:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:90138</guid><dc:creator>Jeff Key</dc:creator><description /></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#90245</link><pubDate>Tue, 16 Mar 2004 06:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:90245</guid><dc:creator>Krzysztof Cwalina</dc:creator><description>Thomas, thanks for the feedback. I am new to blogging and so I appreciate any comment that can help me understand what's useful to the readers and what's not.&lt;br&gt;&lt;br&gt;... and I am pushing for a faster release :-) I can asure you that all of us here at MS understand that shipping sooner is a very useful feature.</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#90354</link><pubDate>Tue, 16 Mar 2004 12:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:90354</guid><dc:creator>Saurabh Jain</dc:creator><description>You sure are competing with CBrumme when it comes to the long blogging.</description></item><item><title>.NET design guidelines weblog</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#90555</link><pubDate>Tue, 16 Mar 2004 20:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:90555</guid><dc:creator>Zinoblog</dc:creator><description /></item><item><title>.NET design guidelines weblog</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#90557</link><pubDate>Tue, 16 Mar 2004 20:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:90557</guid><dc:creator>Zinoblog</dc:creator><description /></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#91097</link><pubDate>Wed, 17 Mar 2004 13:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:91097</guid><dc:creator>Clay</dc:creator><description>I think the length and content are just fine. I would rather have a larger piece of related material than have it chunked out over ten blog entries.</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#91515</link><pubDate>Thu, 18 Mar 2004 01:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:91515</guid><dc:creator>W Poust</dc:creator><description>A good usage guideline we use for STL collections is to make a class out of them (actualy using typedef).  It works out great when the collection type changes and those collections are passed as parameters.&lt;br&gt;&lt;br&gt;If I understood the examples, you are advocating...&lt;br&gt;void DoSomething(IList&amp;lt;int&amp;gt; param) {...}&lt;br&gt;void DoSomething2(IList&amp;lt;int&amp;gt; param) {...}&lt;br&gt;&lt;br&gt;So, you have to do through and modify each menthod signature if the collection changes.  Also, in some ways it kind of leaks implementation details.&lt;br&gt;&lt;br&gt;What I am suggesting is...&lt;br&gt;&lt;br&gt;class RefreshKeyList : IList&amp;lt;int&amp;gt;&lt;br&gt;{&lt;br&gt;}&lt;br&gt;&lt;br&gt;void DoSomething(RefreshKeyList param) {...}&lt;br&gt;void DoSomething2(RefreshKeyList param) {...}&lt;br&gt;&lt;br&gt;Later on if the list type needs to change, there's just one place that needs to be changed.  Also, the collection name better describes what it represents.</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#91548</link><pubDate>Thu, 18 Mar 2004 02:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:91548</guid><dc:creator>Krzysztof Cwalina</dc:creator><description>W, thanks for the comment. You may be right re the point about aliasing, but only if you are talking about guidelines for application developers, not for reusable library developers. Application developers are rarely concerned with binary breaking changes and only mildly concerned with source breaking changes. They are the only people calling their, often internal, APIs. Changing what RefreshKeyList “aliases” (inherits from or implements in the C# example) is a potentially breaking change. Reusable library vendors (including Microsoft) have a very high bar for such changes. We basically don’t expect to ever change DoSomething(IList&amp;lt;int&amp;gt;) to anything else.&lt;br&gt;You are right that aliasing improves the name. This is taken into account in the guidelines. See guideline:&lt;br&gt;Consider returning a subclass of a standard collection from high level APIs, even if you don’t presently plan to provide any customization. If your API returns one of the interfaces (IEnumerable&amp;lt;T&amp;gt;, IList&amp;lt;T&amp;gt;, etc.) or one of the standard collections (Collection&amp;lt;T&amp;gt;, ReadOnlyCollection&amp;lt;T&amp;gt;, etc.) the name of the type will not be as descriptive as possible and also you will not be able to add members to the APIs in the future.&lt;br&gt;But, there are drawbacks of this approach. For example, if the type represents an input (thus the guideline only recommends it for outputs), you a limiting the callers of the method to the specified type and its subtypes. &lt;br&gt;I am not sure I understand the comment about “leaking the implementation details”. Could you clarify?&lt;br&gt;</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#92730</link><pubDate>Fri, 19 Mar 2004 19:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:92730</guid><dc:creator>J. Ambrose Little</dc:creator><description>Thanks for the post!  This is better than the PDC Whidbey docs on generics.  I'll definitely be saving a link to it.&lt;br&gt;&lt;br&gt;A few comments:&lt;br&gt;1. &amp;quot;Methods should always return Collections returned from methods should be snapshots.&amp;quot;  This doesn't make sense; I think it's likely a typo, but with a topic like this, you need to be careful to make sense. :)&lt;br&gt;&lt;br&gt;2. Regarding suggested naming conventions, I think the one-letter option is way out of wack with the other .NET naming conventions and quickly loses its helpfulness when using multiple constraints.  I have a couple other options in order of preference.  &lt;br&gt;&lt;br&gt;a) Enable a special character prefix (such as $, #, @, etc.) to denote a type parameter.  This would be easy to type (one stroke) and would make them stand out.&lt;br&gt;b) Recommend a suffix such as Type, TypeParam, or something better (preferably short).&lt;br&gt;&lt;br&gt;3. Define what you mean by &amp;quot;high-level API.&amp;quot;&lt;br&gt;&lt;br&gt;4. Define what you mean by &amp;quot;snapshot&amp;quot; and &amp;quot;live&amp;quot; collection.&lt;br&gt;&lt;br&gt;5. Explain type parameter inference or at least reference it in the docs.&lt;br&gt;&lt;br&gt;6. Don't use &amp;quot;vanilla&amp;quot; and &amp;quot;plain&amp;quot; and &amp;quot;standard&amp;quot; to describe the same thing.  Pick one adjective and stick with it and define what you mean by it.&lt;br&gt;&lt;br&gt;7. Consider expanding the performance considerations to be more specific.  For instance, when you say &amp;quot;The CLR shares IL, metadata, and some JIT’d/NGEN’d native code across types/methods constructed from generic types/methods&amp;quot; and &amp;quot;do not enjoy certain JIT compiler optimizations,&amp;quot; it'd be nice to get a better understanding of what is shared and not shared and what is not optimized.&lt;br&gt;&lt;br&gt;8. Consider moving the detailed explanations of generics into separate topics (away from the library guidelines) and just reference them from here.  For those who understand this stuff, it'd make it much more readable.  Or at least make the stuff collapsable or something like that.&lt;br&gt;&lt;br&gt;9. Consider explaining how you're optimizing EventHandler&amp;lt;T&amp;gt; and Nullable&amp;lt;T&amp;gt; (maybe in a separate section) to help serve as an example for generic type authors?&lt;br&gt;&lt;br&gt;10. &amp;quot;Do not introduce new generic types and methods without fully understanding, measuring, and documenting the performance ramifications of their expected use.&amp;quot;  This is a bit severe and vague.  It probably should not even be in the guidelines as it is implicit in any design that you should do these things.&lt;br&gt;&lt;br&gt;11. I like the common patterns section.  This should be easily found for newbies to understand the usefulness of generics.&lt;br&gt;&lt;br&gt;12. I don't really understand the differences between List&amp;lt;T&amp;gt; and Collection&amp;lt;T&amp;gt;.  Please consider expanding on that topic.&lt;br&gt;&lt;br&gt;13. &amp;quot;When inheriting from ReadOnlyCollection, name it XxxCollection. If you have both read-only and read/write versions of the same collection, name them ReadOnlyXxxCollection and XxxCollection, not XxxCollection and XxxFileInfoCollection&amp;quot;  I don't get why anyone would use XxxFileInfoCollection to indicate Read Only.&lt;br&gt;&lt;br&gt;14. I love Nullable&amp;lt;T&amp;gt;.  I agree with Anders on the use; however, I don't get the second option for CLS compliant stuff:&lt;br&gt;&lt;br&gt;public int Age { get; set; } // this is actually int or null (if Age does not have a value)&lt;br&gt;&lt;br&gt;int cannot be null..?&lt;br&gt;&lt;br&gt;Thanks again for the write up.  Good stuff!</description></item><item><title>Generics! Generics! Generics!</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#92821</link><pubDate>Fri, 19 Mar 2004 21:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:92821</guid><dc:creator>Random Thoughts of Jorriss</dc:creator><description /></item><item><title>Generics! Generics! Generics!</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#92822</link><pubDate>Fri, 19 Mar 2004 21:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:92822</guid><dc:creator>Random Thoughts of Jorriss</dc:creator><description /></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#94147</link><pubDate>Tue, 23 Mar 2004 00:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:94147</guid><dc:creator>Rob</dc:creator><description>Does Nullable&amp;lt;T&amp;gt; store a separate flag to indicate whether something has a value or is it inferred based on whether or not the value is null?&lt;br&gt;&lt;br&gt;I have an odd case where I need to differentiate between Not Supplied, and Supplied but Null.  Hopefully this is possible.</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#94200</link><pubDate>Tue, 23 Mar 2004 03:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:94200</guid><dc:creator>Krzysztof Cwalina</dc:creator><description>J, these are all great comments. I will try to incorporate them into the main document. &lt;br&gt;As to the type parameter name, we did debate this guideline a lot. We are fully aware that in many scenarios more descriptive identifiers would be better. We finally settled on one letter identifiers as seems they have the edge in the very simple scenarios (like List&amp;lt;T&amp;gt; where the purpose of T is obvious) and these are our main concern when it comes to usability (i.e. we try to optimize for simple 80% scenario and make the rest possible). It also seems like special characters you suggested would be also “out of whack with the other .NET naming conventions”. &lt;br&gt;&lt;br&gt;“High level APIs” are APIs for mainline scenarios that are usually quite specialized for vertical scenarios. For example, dialog APIs are relatively low level and let you create any dialog you need. FileOpenDialog APIs are high level, easy to use when you work in the “vertical” scenario of opening a dialog to get a file path from the user. I will make it clearer in the main document.&lt;br&gt;&lt;br&gt;“Snapshot” is when let’s say you get a collection of files in a directory and the collection does not get updated as files are added or removed from the directory; you need to get another copy of the collection to get updates made to the directory. “Live” collection would be updated as the directory changes.&lt;br&gt;&lt;br&gt;Type parameter inferencing works for generic methods that take a formal method parameter that references (uses) a type parameter. For example Array.Sort&amp;lt;T&amp;gt;(T[] array) takes formal parameter “array” that is of type T[], where T is a type parameter. So now, when Sort&amp;lt;T&amp;gt; is called the type argument does not need to be specified because it can be inferred from the argument (array) passed. For example the following would be legal:&lt;br&gt;string[] names = string[] { “Foo”, “Bar” };&lt;br&gt;Array.Sort(names); // compiler knows it’s actually Sort&amp;lt;string&amp;gt; because array is string[]&lt;br&gt;&lt;br&gt;List&amp;lt;T&amp;gt; is intended for internal implementation, rarely or never visible in public APIs. Collection&amp;lt;T&amp;gt; is intended for reusable library designers to be exposed from their public APIs. The reasons for this are complex. I will try to write it down one day and post it.&lt;br&gt;&lt;br&gt;The Nullable&amp;lt;T&amp;gt; CLS alternative is indeed not very clear. The point is that in the underlying data source the Age (or int) may be null. In the Customer APIs it of course cannot be null and the logical “nullness” is indicated by the HasAge property.&lt;br&gt;&lt;br&gt;I hope this helps and thanks again for the through review and good comments.</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#94203</link><pubDate>Tue, 23 Mar 2004 03:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:94203</guid><dc:creator>Krzysztof Cwalina</dc:creator><description>Rob, Nullable&amp;lt;T&amp;gt; has two fields: T and bool (to store the nullness). We are currently not supporting tri-state Nullable&amp;lt;T&amp;gt;, i.e. you cannot store null in Nullable and say that it does have a value. The reason for this is that the envisioned purpose of Nullable&amp;lt;T&amp;gt; was to unify the Reference Type world and the Value Type world in terms of how they handle nullness, not to provide yet another way to represent nullness :-)</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#94205</link><pubDate>Tue, 23 Mar 2004 03:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:94205</guid><dc:creator>Rob</dc:creator><description>What about Nullable&amp;lt;T&amp;gt; where T is a reference type?&lt;br&gt;&lt;br&gt;I understand why a tristate nullable value type isn't implemented, but it should be pretty easy to add myself.</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#94271</link><pubDate>Tue, 23 Mar 2004 06:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:94271</guid><dc:creator>Krzysztof Cwalina</dc:creator><description>Rob, i am not sure if I fully understand your last post, but we don't allow you to store null in Nullable&amp;lt;SomeReferenceType&amp;gt; and specify that Hasvalue property be true. basically, one you pass null to the constructor of Nullable&amp;lt;T&amp;gt;, the HasValue property get set to false.</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#94463</link><pubDate>Tue, 23 Mar 2004 15:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:94463</guid><dc:creator>Rob</dc:creator><description>Ok.  So as you said, Nullable exists to unify value and reference types.&lt;br&gt;&lt;br&gt;I was thinking it'd be more like the Option type in SML or something.&lt;br&gt;&lt;br&gt;No problem, I can always write my own.&lt;br&gt;&lt;br&gt;Thanks.</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#95205</link><pubDate>Wed, 24 Mar 2004 16:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:95205</guid><dc:creator>J. Ambrose Little</dc:creator><description>Krzysztof,&lt;br&gt;&lt;br&gt;Thanks for the reply and explanations.  Please consider adding your explanation of terms to your document and/or referencing relevant docs (e.g., type parameter inference).&lt;br&gt;&lt;br&gt;As for the special character convention, I don't think it'd be really out of whack as a language feature.  Technically, int, double, float, string, etc. would be out of whack, but they're not because they're part of the language, not so much part of the API.  A special character to indicate a type parameter would, in my estimation, fall under that umbrella.&lt;br&gt;&lt;br&gt;In any case, thanks for expanding on your reasoning there.  I'm not sure I can bring myself to use T, but if it's a guideline in the final rev, I suppose I should try. :)&lt;br&gt;</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#95211</link><pubDate>Wed, 24 Mar 2004 16:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:95211</guid><dc:creator>J. Ambrose Little</dc:creator><description>Scratch that comment on special characters.  It would hose CLS compatibility.. duh..</description></item><item><title>Why Design Guidelines?</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#104536</link><pubDate>Wed, 31 Mar 2004 08:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:104536</guid><dc:creator>Krzysztof Cwalina</dc:creator><description /></item><item><title>Why Design Guidelines?</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#104541</link><pubDate>Wed, 31 Mar 2004 08:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:104541</guid><dc:creator>Krzysztof Cwalina</dc:creator><description /></item><item><title>More Recommended Reading</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#161932</link><pubDate>Tue, 22 Jun 2004 03:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:161932</guid><dc:creator>ShowUsYour</dc:creator><description /></item><item><title>Delegate-Based APIs</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#162550</link><pubDate>Tue, 22 Jun 2004 19:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:162550</guid><dc:creator>Krzysztof Cwalina</dc:creator><description /></item><item><title>Delegate-Based APIs</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#162675</link><pubDate>Tue, 22 Jun 2004 21:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:162675</guid><dc:creator>Eric J. Smith's Weblog</dc:creator><description /></item><item><title>Inheritance   Generics   constraints == the worst documentation experience</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#173838</link><pubDate>Tue, 06 Jul 2004 15:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:173838</guid><dc:creator>Justin Lovell's Blog</dc:creator><description /></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#186138</link><pubDate>Sat, 17 Jul 2004 20:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:186138</guid><dc:creator>Mateusz Kierepka</dc:creator><description>:) cool article!&lt;br&gt;&lt;br&gt;regards from Poland &lt;br&gt;</description></item><item><title>Ancora sulle novit del Framework 2.0... Generics e altro.</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#198327</link><pubDate>Tue, 27 Jul 2004 14:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:198327</guid><dc:creator>Andrea Zani</dc:creator><description /></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#204824</link><pubDate>Mon, 02 Aug 2004 09:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:204824</guid><dc:creator>dianying xia zai</dc:creator><description>[href=&lt;a target="_new" href="http://www.dmoz.net.cn/"&gt;http://www.dmoz.net.cn/&lt;/a&gt; wangzhidaquang]&lt;br&gt;[href=&lt;a target="_new" href="http://www.86dmoz.com/"&gt;http://www.86dmoz.com/&lt;/a&gt; jingpingwangzhi]&lt;br&gt;[href=&lt;a target="_new" href="http://movie.kamun.com/"&gt;http://movie.kamun.com/&lt;/a&gt; mianfeidianying]&lt;br&gt;[href=&lt;a target="_new" href="http://www.kamun.com/"&gt;http://www.kamun.com/&lt;/a&gt; dianyingxiazai]&lt;br&gt;[href=&lt;a target="_new" href="http://music.kamun.com/"&gt;http://music.kamun.com/&lt;/a&gt; MP3 free download]&lt;br&gt;[href=&lt;a target="_new" href="http://www.pc530.net/"&gt;http://www.pc530.net/&lt;/a&gt; diannaoaihaozhe]&lt;br&gt;[href=&lt;a target="_new" href="http://www.5icc.com/"&gt;http://www.5icc.com/&lt;/a&gt; duangxingcaixingxiazha]&lt;br&gt;[href=&lt;a target="_new" href="http://www.dianyingxiazai.com/"&gt;http://www.dianyingxiazai.com/&lt;/a&gt; dianyingxiazai]&lt;br&gt;[href=&lt;a target="_new" href="http://www.yinyuexiazai.com/"&gt;http://www.yinyuexiazai.com/&lt;/a&gt; yinyuexiazai]</description></item><item><title>Null Object</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#221672</link><pubDate>Fri, 27 Aug 2004 22:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:221672</guid><dc:creator>Web Log di Adrian Florea</dc:creator><description /></item><item><title>Six Questions about Generics and Performance</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#229027</link><pubDate>Tue, 14 Sep 2004 00:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:229027</guid><dc:creator>Rico Mariani's WebLog</dc:creator><description /></item><item><title>Fun with Generics: BindingList and ReadOnlyCollection</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#229835</link><pubDate>Wed, 15 Sep 2004 11:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:229835</guid><dc:creator>Chris Garty's Weblog</dc:creator><description /></item><item><title>Fun with Generics: BindingList and ReadOnlyCollection</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#229836</link><pubDate>Wed, 15 Sep 2004 11:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:229836</guid><dc:creator>Chris Garty's Weblog</dc:creator><description /></item><item><title>.NET 2k5 Generics: Guidelines</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#230138</link><pubDate>Thu, 16 Sep 2004 00:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:230138</guid><dc:creator>Test Bed</dc:creator><description /></item><item><title>Design Guidelines Update: Names of Generic Type Parameters</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#251723</link><pubDate>Wed, 03 Nov 2004 19:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:251723</guid><dc:creator>Krzysztof Cwalina</dc:creator><description /></item><item><title>Design Guidelines Update: Names of Generic Type Parameters</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#251872</link><pubDate>Wed, 03 Nov 2004 23:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:251872</guid><dc:creator>dotRob</dc:creator><description /></item><item><title>Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#447020</link><pubDate>Wed, 03 Aug 2005 07:44:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:447020</guid><dc:creator>Bryan's Blog</dc:creator><description /></item><item><title>Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#447023</link><pubDate>Wed, 03 Aug 2005 07:51:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:447023</guid><dc:creator>Bryan's Blog</dc:creator><description /></item><item><title>Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#447024</link><pubDate>Wed, 03 Aug 2005 07:55:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:447024</guid><dc:creator>Bryan's Blog</dc:creator><description /></item><item><title>Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#447027</link><pubDate>Wed, 03 Aug 2005 07:56:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:447027</guid><dc:creator>Bryan's Blog</dc:creator><description /></item><item><title>Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#447030</link><pubDate>Wed, 03 Aug 2005 08:01:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:447030</guid><dc:creator>Bryan's Blog</dc:creator><description /></item><item><title>Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#447031</link><pubDate>Wed, 03 Aug 2005 08:04:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:447031</guid><dc:creator>Bryan's Blog</dc:creator><description /></item><item><title>Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#447170</link><pubDate>Wed, 03 Aug 2005 18:38:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:447170</guid><dc:creator>Bryan's Blog</dc:creator><description /></item><item><title>Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#449189</link><pubDate>Tue, 09 Aug 2005 00:38:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:449189</guid><dc:creator>Bryan Schoening's Blog</dc:creator><description /></item><item><title>Reflection support for generic types in .NET Compact Framework</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#462632</link><pubDate>Fri, 09 Sep 2005 01:35:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:462632</guid><dc:creator>Nazim Lala</dc:creator><description>Version 2 of .NET Compact Framework (NETCF) will provide support for parametric polymorphism aka Generics....</description></item><item><title>Reflection support for generic types in .NET Compact Framework</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#462635</link><pubDate>Fri, 09 Sep 2005 01:39:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:462635</guid><dc:creator>Nazim Lala</dc:creator><description>Version 2 of .NET Compact Framework (NETCF) will provide support for parametric polymorphism aka Generics....</description></item><item><title>Reflection support for generic types in .NET Compact Framework</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#462638</link><pubDate>Fri, 09 Sep 2005 01:43:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:462638</guid><dc:creator>Nazim Lala</dc:creator><description>Version 2 of .NET Compact Framework (NETCF) will provide support for parametric polymorphism aka Generics....</description></item><item><title>Reflection support for generic types in .NET Compact Framework</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#462640</link><pubDate>Fri, 09 Sep 2005 01:47:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:462640</guid><dc:creator>Nazim Lala</dc:creator><description>Version 2 of .NET Compact Framework (NETCF) will provide support for parametric polymorphism aka Generics....</description></item><item><title>CSK</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#577764</link><pubDate>Mon, 17 Apr 2006 23:33:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:577764</guid><dc:creator>Stanley's Blog</dc:creator><description>For some time now I have been using the Commerce Starter Kit for one of my websites, Stan's Collectables....</description></item><item><title>Generics! Generics! Generics!</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#581753</link><pubDate>Sun, 23 Apr 2006 23:38:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:581753</guid><dc:creator>Jorriss.Net</dc:creator><description>Generics Design Guidelines courtesy of Krzysztof Cwalina.</description></item><item><title>Generics Patterns and Practices: ideas and suggestions for when to use generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#649006</link><pubDate>Wed, 28 Jun 2006 00:52:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:649006</guid><dc:creator>The Visual Basic Team</dc:creator><description>So at TechEd-2006, I gave a chalktalk on generics patterns and practices. I've zipped the content up...</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#1094745</link><pubDate>Fri, 17 Nov 2006 19:50:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1094745</guid><dc:creator>Bernd Rickenberg</dc:creator><description>&lt;p&gt;Thanks for a good article. &lt;/p&gt;
&lt;p&gt;I'm missing valuable performance information on the generics collection. MSDN only states running times i terms of O() notificaion for a few operations. There does not seem to be consistent information about this topic. I find this very important, when trying to figure out which type to use for a certain application...&lt;/p&gt;</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#1109965</link><pubDate>Mon, 20 Nov 2006 20:40:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1109965</guid><dc:creator>kcwalina</dc:creator><description>&lt;p&gt;Bernd, &lt;/p&gt;
&lt;p&gt;I think the best way to get this information in consistent format is to file a suggestion to add this information MSDN docs. You can file such suggestions at MSDN Feedback center: &lt;a rel="nofollow" target="_new" href="http://connect.microsoft.com/feedback/default.aspx?SiteID=210"&gt;http://connect.microsoft.com/feedback/default.aspx?SiteID=210&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Generics Patterns and Practices: ideas and suggestions for when to use generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#1857046</link><pubDate>Sun, 11 Mar 2007 09:01:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1857046</guid><dc:creator>The Visual Basic Team</dc:creator><description>&lt;p&gt;So at TechEd-2006, I gave a chalktalk on generics patterns and practices. I've zipped the content up&lt;/p&gt;
</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#8015259</link><pubDate>Tue, 04 Mar 2008 04:42:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8015259</guid><dc:creator>Sanjay</dc:creator><description>&lt;p&gt;Suppose we have classes such as, worker, manager, lifter, ... and these derive from person class.&lt;/p&gt;
&lt;p&gt;Now, we need to expose all these as custom collections through an Organization class.&lt;/p&gt;
&lt;p&gt;So, do we need to create separate collection class for each of above OR declare a single collection class and all specific collection classes should inherit from it?&lt;/p&gt;
&lt;p&gt;What is the best method to expose the single Generic type safe collection for all above base types?&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Sanjay&lt;/p&gt;</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#8156764</link><pubDate>Tue, 11 Mar 2008 21:12:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8156764</guid><dc:creator>kcwalina</dc:creator><description>&lt;p&gt;Sanjay, as a rule of thumb, I would first consider Collection&amp;lt;T&amp;gt; or ReadOnlyCollection&amp;lt;T&amp;gt;, then a custom collection that inherits from them. &lt;/p&gt;
&lt;p&gt;You can read more on this at &lt;a rel="nofollow" target="_new" href="http://blogs.msdn.com/kcwalina/archive/2005/09/23/Collections.aspx"&gt;http://blogs.msdn.com/kcwalina/archive/2005/09/23/Collections.aspx&lt;/a&gt; and all the details in the Framework Design Guidelines book.&lt;/p&gt;
</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#8435187</link><pubDate>Mon, 28 Apr 2008 14:52:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8435187</guid><dc:creator>Michel de Ruiter</dc:creator><description>&lt;p&gt;Am I the only one having problems printing this page? All pages except the first only contain the last line...&lt;/p&gt;
&lt;p&gt;Is there a printer-ready version somewhere, perhaps?&lt;/p&gt;</description></item><item><title>re: Design Guidelines Update: Generics</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#8682248</link><pubDate>Thu, 03 Jul 2008 00:15:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8682248</guid><dc:creator>gary</dc:creator><description>&lt;p&gt;You say that we should:&lt;/p&gt;
&lt;p&gt;&amp;quot;Do use Nullable&amp;lt;T&amp;gt; and EventHandler&amp;lt;T&amp;gt; even over value types. We will work to make these two important generic types as efficient as possible.&amp;quot;&lt;/p&gt;
&lt;p&gt;Your blog post &lt;a rel="nofollow" target="_new" href="http://blogs.msdn.com/kcwalina/archive/2005/09/21/ValueTypeEventArgs.aspx"&gt;http://blogs.msdn.com/kcwalina/archive/2005/09/21/ValueTypeEventArgs.aspx&lt;/a&gt; mentions how the garbage collector can be stressed if many events are being raised.&lt;/p&gt;
&lt;p&gt;Can you explain how you can make the EventHandler&amp;lt;T&amp;gt; more efficient than having a value type. And by value type, do you mean struct, or ints etc. Wouldn't the following always be more performant than creating objects?&lt;/p&gt;
&lt;p&gt;// second argument isn't an EventArgs derived type, for performance reasons, avoiding too many allocations&lt;/p&gt;
&lt;p&gt;public delegate void MyEventHandler(object sender, int someValue);&lt;/p&gt;
&lt;p&gt;public class MyClass&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;public event MyEventHandler MyEvent;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;</description></item><item><title>Delegate-Based APIs &amp;laquo; using &amp;#8230;</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#9007160</link><pubDate>Mon, 20 Oct 2008 13:04:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9007160</guid><dc:creator>Delegate-Based APIs &amp;laquo; using &amp;#8230;</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://esersahin.wordpress.com/2008/10/20/delegate-based-apis/"&gt;http://esersahin.wordpress.com/2008/10/20/delegate-based-apis/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>List&amp;lt;T&amp;gt; | hilpers</title><link>http://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx#9347780</link><pubDate>Tue, 20 Jan 2009 18:13:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9347780</guid><dc:creator>List&amp;lt;T&amp;gt; | hilpers</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://www.hilpers.com/296331-list-t"&gt;http://www.hilpers.com/296331-list-t&lt;/a&gt;&lt;/p&gt;
</description></item></channel></rss>