<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.atalasoft.com/cs/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>Rick Minerich's Development Wonderland : VB.NET, languages</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/tags/VB.NET/languages/default.aspx</link><description>Tags: VB.NET, languages</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>F# Discoveries This Week 11/22/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx</link><pubDate>Sun, 22 Nov 2009 23:49:52 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19754</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19754.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19754</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19754</wfw:comment><description>&lt;p&gt;Over this past week at PDC I was lucky enough to see some fantastic sessions and spend time with members of the F# and greater Visual Studio language teams.&amp;#160; Naturally, these experiences have left me both floored and swimming in new ideas.&amp;#160; This edition of Discoveries This Week includes both the very best of what I saw at PDC 2009 and the most outstanding things I’ve glimpsed going on in the F# community.&amp;#160; Please do enjoy.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Reflection on the PDC Keynotes&lt;/h3&gt;  &lt;p&gt;For the most information in the shortest amount of time I suggest watching the &lt;a href="http://microsoftpdc.com/Sessions/KEY01"&gt;day one&lt;/a&gt; and &lt;a href="http://microsoftpdc.com/Sessions/KEY02"&gt;day two&lt;/a&gt; PDC keynotes.&amp;#160; They are both jam packed with exciting announcements and demos.&amp;#160; While at PDC I wrote about my experience watching these &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/17/surprises-in-the-pdc09-keynote-open-source-open-platforms-and-the-democratization-of-data.aspx"&gt;here&lt;/a&gt; (day one) and &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/18/pdc09-keynote-day-2-silverlight-4-0-and-free-laptops.aspx"&gt;here&lt;/a&gt; (day two).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://microsoftpdc.com/Sessions/FT52"&gt;Microsoft Perspectives on the Future of Programming&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Come hear from several of the Microsoft senior technical leaders about the future of programming, programming languages, and tools.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you watch just one PDC session let this be it.&amp;#160; &lt;/p&gt;  &lt;p&gt;With Butler Lampson, Erik Meijer, Don Box, Jeffrey Snover, Herb Sutter, and Burton Smith, Microsoft’s best gathered to debate the future of programming in a twitter driven panel at PDC.&amp;#160; I was happy to be able to contribute with a question on type systems which erupted into quite a disagreement.&amp;#160; I will be writing about this session at length, and reflecting on my &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2008/10/15/anders-hejlsberg-on-the-future-of-programming-languages.aspx"&gt;past thoughts about this topic&lt;/a&gt;, in the near future.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Luke Hoban’s &lt;a href="http://microsoftpdc.com/Sessions/FT20"&gt;F# for Parallel and Asynchronous Programming&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;F#, a functional and object-oriented language for Microsoft .NET, adds many tools to make parallel and asynchronous programming both fun and easy. Come hear the core concepts of the F# language, and see how ideas like immutability, functional design, async workflows, agents, and more can be used to meet the challenges of today’s real-world applications.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;By combining small, easily understood, ideas Luke constructs F#’s big picture in the most engaging way I’ve seen to date.&amp;#160; This is now my go to talk for people who are interested in, but new to, the F# programming language.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jomo Fisher’s &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2009/11/17/f-scripting-net-4-0-and-mixed-mode-assemblies.aspx"&gt;F# Scripting, .NET 4.0 and Mixed-mode assemblies&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of the recent problems we’ve seen is that, because of the support for side-by-side runtimes, .NET 4.0 has changed the way that it binds to older mixed-mode assemblies. These assemblies are, for example, those that are compiled from C++\CLI. Currently available DirectX assemblies are mixed mode.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This clever approach to switching the F# REPL to 2.0 binding mode is particularly handy to know.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Matthew Moloney’s &lt;a href="http://www.mattssoftwareblog.com/?p=212"&gt;Collaborative Development Using F# Interactive&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is a proof of concept of an interactive collaborative development environment I built using&amp;#160; F# Interactive. The aim here is to explore different ideas for further development, not so much as to present an alternative to Visual Studio.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I couldn’t pass this very cool idea up.&amp;#160; I can’t help but think about extending this to full feldged explorative programming community websites.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Bart Czernicki’s &lt;a href="http://silverlighthack.com/post/2009/11/04/Silverlight-3-and-FSharp-Support-in-Visual-Studio-2010.aspx"&gt;Silverlight 3 and F# Support in Visual Studio 2010&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The goal of this blog post is to make you aware of F# support in Silverlight in Visual Studio 2010.&amp;#160; In addition, this blog post shows an example why F# is going to be very important for Silverlight architects and developers.&amp;#160; Note:&amp;#160; This is NOT an intro to F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A great post.&amp;#160; I am always interested in seeing concrete examples of F# adding value to existing technologies and platforms.&amp;#160; I have a sneaking suspicion that there are very few places where it won’t.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+11%2f22%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f22%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;title=F%23+Discoveries+This+Week+11%2f22%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f22%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f22%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19754" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/PDC09/default.aspx">PDC09</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/pdc/default.aspx">pdc</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/REPL/default.aspx">REPL</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Silverlight+3.0/default.aspx">Silverlight 3.0</category></item><item><title>One of these languages is not like the others - Part 1 - Enforcement of Abstract Implementation</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx</link><pubDate>Tue, 10 Feb 2009 15:47:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17443</guid><dc:creator>RickM</dc:creator><slash:comments>5</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17443.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17443</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17443</wfw:comment><description>&lt;p&gt;This is the first in a series of posts on the topic of interaction between different .NET languages.&amp;#160; I will cover all of the major Microsoft languages: C#, Visual Basic, F# and C++/CLI. &lt;/p&gt;  &lt;p&gt;In this first post in the series I will build a four language project in Visual Studio 2008 and begin to explore inter-language inheritance.&amp;#160; One of the languages behaves in a significantly different way when compared with the others, can you guess which one it is? &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Enforcement of Abstract Implementation&lt;/h3&gt;  &lt;p&gt;First things first, let’s define our abstract base class.&amp;#160; C# is considered the standard language for library architecting and so it is what we will be using.&lt;/p&gt;  &lt;pre style="border-right:#cecece 1px solid;padding-right:5px;border-top:#cecece 1px solid;padding-left:5px;min-height:40px;padding-bottom:5px;overflow:auto;border-left:#cecece 1px solid;width:480px;padding-top:5px;border-bottom:#cecece 1px solid;background-color:#fbfbfb;"&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; abstract &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CSharpBaseClass
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#ffffff;"&gt;  2: {
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  3:   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; abstract void PublicAbstractMethod();      
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#ffffff;"&gt;  4:   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; abstract void PublicAbstractMethod(int inint);
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  5:   &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; abstract void ProtectedAbstractMethod();
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#ffffff;"&gt;  6:   &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; abstract void ProtectedAbstractMethod(int inint);
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  7: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;In each of our child projects we will be inheriting from this class.&amp;#160; Let’s start with &lt;strong&gt;C#&lt;/strong&gt;. &lt;/p&gt;

&lt;pre style="border-right:#cecece 1px solid;padding-right:5px;border-top:#cecece 1px solid;padding-left:5px;min-height:40px;padding-bottom:5px;overflow:auto;border-left:#cecece 1px solid;width:480px;padding-top:5px;border-bottom:#cecece 1px solid;background-color:#fbfbfb;"&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CSharpChildClass : CSharpBaseClass
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#ffffff;"&gt;  2: {
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  3: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Now anyone with even a bit of experience in the C# language knows that this won’t compile.&amp;#160; For each of the abstract methods in the base class the inheriting class is expected to provide an implementation. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;… error CS0534: 'CSharpChild.CSharpChildClass' does not implement inherited abstract member …&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;This is similarly true for &lt;strong&gt;Visual Basic&lt;/strong&gt;. 

  &lt;br /&gt;&lt;/p&gt;

&lt;pre style="border-right:#cecece 1px solid;padding-right:5px;border-top:#cecece 1px solid;padding-left:5px;min-height:40px;padding-bottom:5px;overflow:auto;border-left:#cecece 1px solid;width:480px;padding-top:5px;border-bottom:#cecece 1px solid;background-color:#fbfbfb;"&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  1: &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; VBChildClass
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#ffffff;"&gt;  2:   &lt;span style="color:#0000ff;"&gt;Inherits&lt;/span&gt; CSharpBase.CSharpBaseClass
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  3: &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;… error BC30610: Class 'VBChildClass' must either be declared 'MustInherit' or override the following inherited 'MustOverride' member(s): &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F#&lt;/strong&gt; shares this behavior as well.&lt;/p&gt;

&lt;pre style="border-right:#cecece 1px solid;padding-right:5px;border-top:#cecece 1px solid;padding-left:5px;min-height:40px;padding-bottom:5px;overflow:auto;border-left:#cecece 1px solid;width:480px;padding-top:5px;border-bottom:#cecece 1px solid;background-color:#fbfbfb;"&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  1: &lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; FSharpChildClass() =
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#ffffff;"&gt;  2:   inherit CSharpBase.CSharpBaseClass()&lt;/pre&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; … error FS0191: No implementation was given for 'CSharpBaseClass.PublicAbstractMethod() : unit'. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kudos to the F# compiler designers for the verbose compile time errors. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; error FS0054: This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[&amp;lt;AbstractClass&amp;gt;]' attribute to your type.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;However, &lt;strong&gt;C++/CLI&lt;/strong&gt; does not.&amp;#160; It’s perfectly acceptable to inherit from an abstract class and provide no implementation for it’s abstract members.&lt;/p&gt;

&lt;pre style="border-right:#cecece 1px solid;padding-right:5px;border-top:#cecece 1px solid;padding-left:5px;min-height:40px;padding-bottom:5px;overflow:auto;border-left:#cecece 1px solid;width:480px;padding-top:5px;border-bottom:#cecece 1px solid;background-color:#fbfbfb;"&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ref &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CppChildClass : &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; CSharpBaseClass
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#ffffff;"&gt;  2: {
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  3: };&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;While a warning is issued, it seems insufficient for what has just taken place: &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;… warning C4570: 'CppChild::CppChildClass' : is not explicitly declared as abstract but has abstract functions &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The result is that the class in question is defaulted to abstract.&amp;#160; If someone where to attempt to instantiate it downstream, it would cause a compiler error:&lt;/p&gt;

&lt;pre style="border-right:#cecece 1px solid;padding-right:5px;border-top:#cecece 1px solid;padding-left:5px;min-height:40px;padding-bottom:5px;overflow:auto;border-left:#cecece 1px solid;width:480px;padding-top:5px;border-bottom:#cecece 1px solid;background-color:#fbfbfb;"&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#fbfbfb;"&gt;  1: CppChildClass cpp = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CppChildClass();
&lt;/pre&gt;&lt;pre style="font-size:12px;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;background-color:#ffffff;"&gt;  2: cpp.LocalMethod();&lt;/pre&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;error CS0144: Cannot create an instance of the abstract class or interface 'ManagedCppChild.ManagedCppChildClass' &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is bad because, if you were an API developer and so did not consume all of your objects, it would be possible to ship a version of your product with abstract suddenly toggled on for one or more of your classes.&amp;#160; All it would take would be for a developer to add a new inherited class or member to an existing abstract base class without writing a corresponding test for every abstract member or inheriting class. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;So, what can we learn from this?&amp;#160; It seem that when using C++/CLI (or managed C++) it is not sufficient to depend on abstract classes to enforce that members are implemented.&amp;#160; Testing must also be strictly enforced.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx&amp;amp;;subject=One+of+these+languages+is+not+like+the+others+-+Part+1+-+Enforcement+of+Abstract+Implementation" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx&amp;amp;;title=One+of+these+languages+is+not+like+the+others+-+Part+1+-+Enforcement+of+Abstract+Implementation" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx&amp;amp;title=One+of+these+languages+is+not+like+the+others+-+Part+1+-+Enforcement+of+Abstract+Implementation" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx&amp;amp;;title=One+of+these+languages+is+not+like+the+others+-+Part+1+-+Enforcement+of+Abstract+Implementation" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx&amp;amp;;title=One+of+these+languages+is+not+like+the+others+-+Part+1+-+Enforcement+of+Abstract+Implementation&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/10/one-of-these-languages-is-not-like-the-others-part-1-enforcement-of-abstract-implementation.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17443" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2B002B002F00_CLI/default.aspx">C++/CLI</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/inheritance/default.aspx">inheritance</category></item></channel></rss>