<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Matthieu MEZIL &#187; MMCS31</title>
	<atom:link href="https://blog.developpez.com/matthieu/pcategory/mmcs31/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/matthieu</link>
	<description></description>
	<lastBuildDate>Fri, 14 Dec 2007 21:05:16 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Rappel sur C# 3.0 et limitation sur les collection initializers</title>
		<link>https://blog.developpez.com/matthieu/p4432/net/rappel_sur_c_3_0_et_limitation_sur_les_c</link>
		<comments>https://blog.developpez.com/matthieu/p4432/net/rappel_sur_c_3_0_et_limitation_sur_les_c#comments</comments>
		<pubDate>Wed, 24 Oct 2007 23:28:39 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MMCS31]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Partons du code suivant : public class Point { &#160; private int _x; &#160; private int _y; &#160; &#160; public int X &#160; { &#160; &#160; get { return _x; } &#160; &#160; set { _x = value; } &#160; } &#160; public int Y &#160; { &#160; &#160; get { return _y; } &#160; &#160; set { _y = value; } &#160; } } public class Rectangle { &#160; private Point _p1; &#160; private [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Partons du code suivant :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class Point <br />
{ <br />
&nbsp; private int _x; <br />
&nbsp; private int _y; <br />
&nbsp;<br />
&nbsp; public int X <br />
&nbsp; { <br />
&nbsp; &nbsp; get { return _x; } <br />
&nbsp; &nbsp; set { _x = value; } <br />
&nbsp; } <br />
&nbsp; public int Y <br />
&nbsp; { <br />
&nbsp; &nbsp; get { return _y; } <br />
&nbsp; &nbsp; set { _y = value; } <br />
&nbsp; } <br />
} <br />
public class Rectangle <br />
{ <br />
&nbsp; private Point _p1; <br />
&nbsp; private point _p2; <br />
&nbsp;<br />
&nbsp; public Point P1 <br />
&nbsp; { <br />
&nbsp; &nbsp; get { return _p1; } <br />
&nbsp; &nbsp; set { _p1 = value; } <br />
&nbsp; } <br />
&nbsp; public Point P2 <br />
&nbsp; { <br />
&nbsp; &nbsp; get { return _p2; } <br />
&nbsp; &nbsp; set { _p2 = value; } <br />
&nbsp; } <br />
}</div></div>
<p>En C# 3.0, ce code pourra être réduit à ça :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class Point <br />
{ <br />
&nbsp; public int X { get; set; } <br />
&nbsp; public int Y { get; set; } <br />
} <br />
public class Rectangle <br />
{ <br />
&nbsp; public Point P1 { get; set; } <br />
&nbsp; public Point P2 { get; set; } <br />
}</div></div>
<p>Le code C# 2.0 suivant</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Point p1 = new Point(); <br />
p1.X = 10; <br />
p1.Y = 10; <br />
Point p2 = new Point(); <br />
p2.X = 20; <br />
p2.Y = 20; <br />
Rectangle r = new Rectangle(); <br />
r.P1 = p1; <br />
r.P2 = p2;</div></div>
<p>peut s&rsquo;écrire en C# 3.0 comme ceci :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Rectangle r = new Rectangle { &nbsp;<br />
&nbsp; P1 = new Point { X = 10, Y = 10 }, &nbsp;<br />
&nbsp; P2 = new Point { X = 20, Y = 20 } };</div></div>
<p>mais également, et c&rsquo;est encore mieux, comme ceci :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Rectangle r = new Rectangle { &nbsp;<br />
&nbsp; P1 = { X = 10, Y = 10 }, &nbsp;<br />
&nbsp; P2 = { X = 20, Y = 20 } };</div></div>
<p>Ceci est possible grâce aux objects initializers.</p>
<p>Avec C# 3.0, une autre nouveauté est les collections initializers : </p>
<p>Le code suivant, écrit en C# 2.0,</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">List&lt;Point&gt; points = new List&lt;Point&gt;(); <br />
Point p = new Point(); <br />
p.X = 10; <br />
p.Y = 10; <br />
points.Add(p); <br />
p = new Point(); <br />
p.X = 20; <br />
p.Y = 20; <br />
points.Add(p);</div></div>
<p>pourra s&rsquo;écrire en C# 3.0 comme ceci : </p>
<p><code class="codecolorer text default"><span class="text">List&lt;Point&gt; points = new List&lt;Point&gt;() { new Point { X = 10, Y = 10 }, new Point { X = 20, Y = 20 }};</span></code></p>
<p>Si on suit la logique des objects initializers, on pourrait envisager d&rsquo;écrire ceci : </p>
<p><code class="codecolorer text default"><span class="text">List&lt;Point&gt; points = new List&lt;Point&gt;() { { X = 10, Y = 10 }, { X = 20, Y = 20 }};</span></code></p>
<p>mais non, ça ne marche pas <img src="https://blog.developpez.com/matthieu/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley" /></p>
<p>En réalité, je pense que je sais pourquoi :<br />
Les collections initializers s&rsquo;appliquent à tous les IEnumerable avec une méthode Add. Quand la méthode Add prend plusieurs paramètres, ceux-ci sont regroupés entre accolades, d&rsquo;où l&rsquo;ambigüeté : </p>
<p><code class="codecolorer text default"><span class="text">Dictionary&lt;string, string&gt; dico = new Dictionary&lt;string, string&gt; {{ &quot;key1&quot;, &quot;value1&quot; }, { &quot;key2&quot;, &quot;value2&quot; }};</span></code></p>
<p>Il n&rsquo;en demeure pas moins que quand j&rsquo;aurai un peu de temps, j&rsquo;essaierai de creuser pour <a href="http://blog.developpez.com/index.php?blog=121&amp;cat=1090">MMCS31</a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POC de MMCS31 alpha 1</title>
		<link>https://blog.developpez.com/matthieu/p3962/mmcs31/poc_de_mmcs31_alpha_1</link>
		<comments>https://blog.developpez.com/matthieu/p3962/mmcs31/poc_de_mmcs31_alpha_1#comments</comments>
		<pubDate>Fri, 13 Jul 2007 22:48:29 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[MMCS31]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Depuis que j&#8217;ai blogué sur mon compilateur MMCS31, je n&#8217;ai pas eu le temps d&#8217;avancer. Comme le projet CodePlex que j&#8217;avais créé pour l&#8217;occasion allé mourrir (délai avant publication atteint), j&#8217;ai décidé de le publier en l&#8217;état. Avant toute chose, sachez que le but n&#8217;est pas d&#8217;écrire un compilateur que du reste personne n&#8217;utilisera mais de faire une POC. Le code a clairement été écrit à &#171;&#160;l&#8217;arrache&#160;&#187;, sans réelle réflexion ni conception et le temps [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Depuis que j&rsquo;ai blogué sur mon <a href="http://blog.developpez.com/index.php?blog=121&amp;title=mmcs31&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1">compilateur MMCS31</a>, je n&rsquo;ai pas eu le temps d&rsquo;avancer.<br />
Comme le <a href="http://www.codeplex.com/mmcs31">projet CodePlex</a> que j&rsquo;avais créé pour l&rsquo;occasion allé mourrir (délai avant publication atteint), j&rsquo;ai décidé de le publier en l&rsquo;état.<br />
Avant toute chose, sachez que le but n&rsquo;est pas d&rsquo;écrire un compilateur que du reste personne n&rsquo;utilisera mais de faire une POC. Le code a clairement été écrit à &laquo;&nbsp;l&rsquo;arrache&nbsp;&raquo;, sans réelle réflexion ni conception et le temps de compilation est catastrophique.<br />
Quand je trouverais un peu de temps, je tacherai d&rsquo;améliorer tout ça.<br />
Dans tous les cas, cela devrait permettre de donner une première idée aux personnes (promis, c&rsquo;est au pluriel :D) qui m&rsquo;ont demandé comment mon compilateur allait fonctionner.<br />
Actuellement, je n&rsquo;ai traité que partiellement le cas d&rsquo;extension des Objects Initializers. Autant dire que je suis loin d&rsquo;avoir terminé ! <img src="https://blog.developpez.com/matthieu/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MMCS31</title>
		<link>https://blog.developpez.com/matthieu/p3778/mmcs31/mmcs31</link>
		<comments>https://blog.developpez.com/matthieu/p3778/mmcs31/mmcs31#comments</comments>
		<pubDate>Fri, 15 Jun 2007 22:46:07 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[MMCS31]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[MMCS31 : C&#8217;est le nom de mon projet de compilateur sencé simplifier l&#8217;écriture du code par rapport à du C# 3.0. Je sais c&#8217;est un peu pourri comme nom mais bon&#8230; J&#8217;ai eu quelques retours me demandant de dévoiler comment je m&#8217;y étais pris et ce que mon compilateur fera, si tout se passe bien, dans sa version finale. Tout d&#8217;abord, ce compilateur n&#8217;est pas un vrai compliateur. Je n&#8217;ai pas défini de grammaire ni [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>MMCS31 : C&rsquo;est le nom de mon projet de compilateur sencé simplifier l&rsquo;écriture du code par rapport à du C# 3.0.<br />
Je sais c&rsquo;est un peu pourri comme nom mais bon&#8230;</p>
<p>J&rsquo;ai eu quelques retours me demandant de dévoiler comment je m&rsquo;y étais pris et ce que mon compilateur fera, si tout se passe bien, dans sa version finale.<br />
Tout d&rsquo;abord, ce compilateur n&rsquo;est pas un vrai compliateur. Je n&rsquo;ai pas défini de grammaire ni aucun autre élément essentiel lorsque l&rsquo;on crée un vrai compilateur.<br />
Pour ma part, mon compilateur fonctionne de la manière suivante :<br />
Il compile le programme avec CodeDom. Il récupère les erreurs eventuelles, analyse le code relatif à l&rsquo;erreur et essaye de reconnaître avec des Regex mes fonctionnalités. Il traduit ensuite le code puis recompile.</p>
<p>Ce que je veux que mon compilateur fasse : </p>
<p><b>Etendre les object initializers afin de pouvoir renseigner plusieurs propriétés en une seule instruction n&rsquo;importe où</b></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">class TestObject <br />
{ <br />
&nbsp; private TestObject() <br />
&nbsp; { <br />
&nbsp; } <br />
&nbsp; public static TestObject Create() <br />
&nbsp; { <br />
&nbsp; &nbsp; return new TestObject(); <br />
&nbsp; } <br />
&nbsp; public int I1 { get; set; } <br />
&nbsp; public string I1S &nbsp;<br />
&nbsp; { &nbsp;<br />
&nbsp; &nbsp; get { return I1.ToString(); } <br />
&nbsp; } <br />
&nbsp; public string S1 { get; set; } <br />
&nbsp; public string S2 { get; set; } <br />
&nbsp; public string S3 { get; set; } <br />
}</div></div>
<p>En C# 3.0, on ne peut utiliser les object initializers qu&rsquo;après un new(). Avec mon compilateur vous pouvez faire des choses comme ça :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var test = TestObject.Create() : { S1 = &quot;S1&quot;, S2 = &quot;S2&quot;, S3 = &quot;S3&quot; }; <br />
test : { S1 = &quot;S1Bis&quot;, S2 = &quot;S2Bis&quot; }; <br />
for (int i = 0 ; i &lt; 10 ; i ++) <br />
&nbsp; Console.WriteLine(TestObject.Create() : { I1 = i }.I1S);</div></div>
<p>Ce code sera traduit par :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var test = TestObject.Create(); <br />
test.S1 = &quot;S1&quot;; <br />
test.S2 = &quot;S2&quot;; <br />
test.S3 = &quot;S3&quot;; <br />
test.S1 = &quot;S1Bis&quot;; <br />
test.S2 = &quot;S2Bis&quot;; <br />
for (int i = 0 ; i &lt; 10 ; i ++) <br />
{ <br />
&nbsp; var mmCS311 = TestObject.Create(); <br />
&nbsp; mmCS311.I1 = i; <br />
&nbsp; Console.WriteLine(mmCS311.I1S); <br />
}</div></div>
<p><b>Etendre les collection initializers afin de pouvoir initialiser les éléments de la collection même si celle-ci est en lecture seule</b></p>
<p>Soit la classe Class1 :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">class Class1 <br />
{ <br />
&nbsp; public List&lt;string&gt; Test { get; set; } <br />
}</div></div>
<p>En C# 3.0, on peut faire ça :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var test = new Class1(); <br />
test.Test = new List&lt;string&gt; { &quot;un&quot;, &quot;deux&quot; };</div></div>
<p>En revanche, soit la classe Class2 :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">class Class2 <br />
{ <br />
&nbsp; public List&lt;string&gt; Test { get; private set; } <br />
}</div></div>
<p>En C# 3.0, impossible d&rsquo;initialiser la liste.</p>
<p>Avec mon compilateur, vous pourrez faire ceci :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var test = new Class2(); <br />
test.Test : { &quot;un&quot;, &quot;deux&quot; };</div></div>
<p>qui sera traduit par :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var test = new Class2(); <br />
test.Add(&quot;un&quot;); <br />
test.Add(&quot;deux&quot;);</div></div>
<p><b>Permettre l&rsquo;ajout d&rsquo;éléments à un IEnumerable avec un Add via un simple +</b></p>
<p>Vous pourrez faire ça :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">int[] ints = { 1, 2, 3 }; <br />
ints = ints + { 4, 5, 6 }; <br />
ints += { 7, 8, 9 }; <br />
ints += 10;</div></div>
<p><b>Quand le type est connu pouvoir, sans passer dans le new</b></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var c = new Class1(); // C# 3.0 <br />
// [...] <br />
c = new(); // MMCS31</div></div>
<p>Vous pourrez également faire sur tous les IEnumerable avec un Add comme pour les tableaux depuis C# 2.0 (voire même avant) :</p>
<p><code class="codecolorer text default"><span class="text">List&lt;string&gt; test = { &quot;un&quot;, &quot;deux&quot; }</span></code> <i> // Plus court que var test = new List<string> { &laquo;&nbsp;un&nbsp;&raquo;, &laquo;&nbsp;deux&nbsp;&raquo; }; </i></p>
<p><b>Quand le type peut être déduit des paramètres, pouvoir sans passer dans l&rsquo;appel d&rsquo;une méthode</b></p>
<p>Soient les classes C1, C2 et C3 :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class C1 <br />
{ <br />
&nbsp; public string S1 { get; set; } <br />
} <br />
public class C2 <br />
{ <br />
&nbsp; public string S2 { get; set; } <br />
} <br />
public class C3 <br />
{ <br />
&nbsp; public int S1 { get; set; } <br />
}</div></div>
<p>Soient les méthodes M :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public void M(C1 c1) <br />
{ <br />
} <br />
public void M(C2 c2) <br />
{ <br />
} <br />
public void M(C3 c3) <br />
{ <br />
}</div></div>
<p>Mon compilateur permettra l&rsquo;écriture suivante :</p>
<p><code class="codecolorer text default"><span class="text">M( { S1 = &quot;S1&quot; } );</span></code></p>
<p>qui sera traduit par :</p>
<p><code class="codecolorer text default"><span class="text">M( new C1 { S1 = &quot;S1&quot; } );</span></code></p>
<p><b>Gérer le <a href="http://blog.developpez.com/index.php?blog=121&#038;title=complement_d_information_sur_les_optiona&#038;more=1&#038;c=1&#038;tb=1&#038;pb=1">Optional comme en VB</a></b></p>
<p><b>break * n</b><br />
Quand on a des boucles imbriquées, on veut parfois en quitter deux d&rsquo;un coup.<br />
Pour cela, on fait des choses comme ça si on ne veut pas utiliser de goto :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">for (...) <br />
{ <br />
&nbsp; bool doBreak = false; <br />
&nbsp; for (...) <br />
&nbsp; { <br />
&nbsp; &nbsp; [...] <br />
&nbsp; &nbsp; doBreak = true; <br />
&nbsp; &nbsp; break; <br />
&nbsp; } <br />
&nbsp; if (doBreak) <br />
&nbsp; &nbsp; break; <br />
}</div></div>
<p>Mon compilateut devra faire la même chose de la façon suivante :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">for (...) <br />
{ <br />
&nbsp; for (...) <br />
&nbsp; { <br />
&nbsp; &nbsp; [...] <br />
&nbsp; &nbsp; break * 2; <br />
&nbsp; } <br />
}</div></div>
<p>Voici pour l&rsquo;instant mon objectif. Comme vous pouvez le voir il y a pas mal de boulot mais <a href="http://blog.developpez.com/index.php?blog=121&amp;title=que_manque_t_il_a_c_3_0&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1">si vous avez d&rsquo;autres idées, n&rsquo;hésitez surtout pas</a>.</p>
<p>Quand j&rsquo;aurais fini tout ça, le step suivant consistera a l&rsquo;intégrer dans Orcas pour la compilation mais aussi et surtout dans l&rsquo;intellisence.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Que manque-t-il à C# 3.0 ?</title>
		<link>https://blog.developpez.com/matthieu/p3768/mmcs31/que_manque_t_il_a_c_3_0</link>
		<comments>https://blog.developpez.com/matthieu/p3768/mmcs31/que_manque_t_il_a_c_3_0#comments</comments>
		<pubDate>Fri, 15 Jun 2007 00:55:50 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[MMCS31]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je suis en train de développer un compilo qui rajoute des facilités d&#8217;écriture à C# 3.0 en traduisant le code en C#3.0 puis en compilant avec CodeDom le code ainsi généré. Je vais bientôt ouvrir un nouveau projet CodePlex. La première fonctionnalité que j&#8217;ai rajouté est la possibilité d&#8217;utiliser les Object Initializer ailleurs qu&#8217;après un new. En effet, je trouve cela assez limité. Par exemple, impossible d&#8217;initialiser en une seule instruction les propriétés d&#8217;un objet [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Je suis en train de développer un compilo qui rajoute des facilités d&rsquo;écriture à C# 3.0 en traduisant le code en C#3.0 puis en compilant avec CodeDom le code ainsi généré. Je vais bientôt ouvrir un nouveau projet CodePlex. La première fonctionnalité que j&rsquo;ai rajouté est la possibilité d&rsquo;utiliser les Object Initializer ailleurs qu&rsquo;après un new. En effet, je trouve cela assez limité. Par exemple, impossible d&rsquo;initialiser en une seule instruction les propriétés d&rsquo;un objet créer via une Factory ni d&rsquo;initialiser plusieurs propriétés d&rsquo;un objet en une seule instruction. Mon compilateur C# 3.1, comme je m&rsquo;amuse à appeler ce langage même si je trouve cela un peu (trop) prétentieux, fait ça.</p>
<p>J&rsquo;ai plusieurs autres idées mais avant de continuer, je lance un petit sondage : que manque-t-il à C# 3.0 ?</p>
<p>Merci d&rsquo;avance pour vos réponses.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
