<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/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>Λοιπά θέματα</title><link>https://www.dotnetzone.gr:443/cs/forums/29/ShowForum.aspx</link><description>Οτιδήποτε άλλα θέματα developing που δεν κολλάνε σε κάποιο από τα υπόλοιπα forums!</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Μα δεν θα έπρεπε να κάνει compile!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/52046.aspx</link><pubDate>Sat, 27 Jun 2009 18:26:48 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:52046</guid><dc:creator>PALLADIN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/52046.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=29&amp;PostID=52046</wfw:commentRss><description>&lt;P&gt;Καλησπέρα&lt;/P&gt;
&lt;P&gt;Είναι η περίπτωση του περιβόητου "trailing-superfluous comma".&lt;BR&gt;Υπάρχει ως alternative production rule για να βοηθήσει σε &lt;BR&gt;copy-paste και code generation σενάρια.&lt;/P&gt;
&lt;P&gt;To C# 3.0 spec έχει πολλές και ενδιαφέρουσες λεπτομέρειες&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;collection-initializer:&lt;BR&gt;{&amp;nbsp;&amp;nbsp; element-initializer-list&lt;SUB&gt;opt&lt;/SUB&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;{&amp;nbsp;&amp;nbsp; element-initializer-list&amp;nbsp;&amp;nbsp; ,&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Μα δεν θα έπρεπε να κάνει compile!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/52042.aspx</link><pubDate>Sat, 27 Jun 2009 11:55:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:52042</guid><dc:creator>darklynx</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/52042.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=29&amp;PostID=52042</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Mitsaras:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;            &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;return&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; Dictionary&amp;lt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;int&lt;/SPAN&gt;, CategoryBase&amp;gt;
            {
                { 0, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; Category(0, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, 0) },
                { 1, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; Category(1, 0, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, 0) },
                 ...........
                { 31, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; Category(31, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, 0) },
                { 32, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; Category(32, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;, 0) },
            };&lt;/SPAN&gt;&lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face=Tahoma&gt;Σε τέτοιες περιπτώσεις ο compiler φτιάχνει εσωτερικά ένα αντικείμενο Dictionary και για κάθε αντικείμενο της λίστας καλεί την Add.Οπότε λογικό είναι να υποθέσουμε ότι κάνει &lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face=Tahoma&gt;το parsing κάπως έτσι:&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;{.....},&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;FONT size=2 face=Tahoma&gt;παρόμοια με ένα comma-delimited file φαντάζομαι.Οπότε μπορεί χαλαρά να αγνοήσει ένα κόμμα στο τέλος.Στο πρότυπο της γλώσσας δεν βρήκα να γράφει ότι μπορείς να το κάνεις αλλά&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;FONT size=2 face=Tahoma&gt;και ούτε ότι δεν δικαιούσαι.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;FONT size=2 face=Tahoma&gt;Το πρόβλημα πλέον με τη C# είναι ότι ο κώδικας που γράφεις και ο κώδικας που παράγεται είναι διαφορετικοί:anonymous methods,lambda expressions,initializer lists,Linq expressions,&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;FONT size=2 face=Tahoma&gt;όλα αυτά και ακόμα παραπάνω είναι αντικείμενα για reparsing από τον compiler.Έρχεται και το functional programming στην C#4.0 και θα δούμε πότε πλέον θα έχει χαθεί εντελώς ο έλεγχος &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;FONT size=2 face=Tahoma&gt;στο &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;FONT size=2 face=Tahoma&gt;τι κώδικας παράγεται από αυτόν που γράφουμε.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/PRE&gt;</description></item><item><title>Απ: Μα δεν θα έπρεπε να κάνει compile!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/52041.aspx</link><pubDate>Sat, 27 Jun 2009 08:50:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:52041</guid><dc:creator>panagiotis_georgiadis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/52041.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=29&amp;PostID=52041</wfw:commentRss><description>&lt;P&gt;Έχεις απόλυτο δίκιο. Δικό μου το λάθος, δεν είναι ακριβώς το ίδιο το παράδειγμα στο MSDN, αλλά όντως είναι ένα χαλαρό πρότυπο για&amp;nbsp;να αφήνει τους code gens να κάνουν τη δουλειά τους πιο εύκολα.&lt;/P&gt;
&lt;P&gt;Όσο για άλλα κρυφά κουσούρια, δεν μπορώ να πω ότι έχω συγκεκριμένα παραδείγματα. Είναι όμως πάντα πολύ ενδιαφέρον να βλέπεις τον IL κώδικα που δημιουργείται από C#, ή να αναλύεις με έναν καλό Memory Profiler,ή να κάνεις advanced debugging με τα MS Debug Tools for Windows (και τα κατάλληλα symbol files). Έτσι βλέπεις βαθύτερα τι γίνεται με τον κώδικά σου.&lt;BR&gt;Ακόμα και χρησιμοποιόντας μόνο τον Task Manager ή και το sysinternals Process Explorer έχω βρει διάφορα περίεργα φαινόμενα, π.χ. με dynamic memory allocation, garbage collection, κλπ.&lt;/P&gt;</description></item><item><title>Απ: Μα δεν θα έπρεπε να κάνει compile!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/52039.aspx</link><pubDate>Sat, 27 Jun 2009 08:10:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:52039</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/52039.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=29&amp;PostID=52039</wfw:commentRss><description>Παναγιώτη, δεν αναφέρομαι στα collection initializers αλλά στο κόμμα στο τέλος.&lt;br&gt;&lt;br&gt;Απ' ό,τι κατάλαβα είναι για να κάνει την ζωή ευκολότερη στον compiler και τα codegen εργαλεία, και να βελτιώσει το... copy pasting.&lt;br&gt;</description></item><item><title>Απ: Μα δεν θα έπρεπε να κάνει compile!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/52038.aspx</link><pubDate>Sat, 27 Jun 2009 08:01:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:52038</guid><dc:creator>panagiotis_georgiadis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/52038.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=29&amp;PostID=52038</wfw:commentRss><description>&lt;P&gt;Δεν είναι καθόλου ασυνήθιστο. Είναι κανονικό feature, χωρίς εισαγωγικά, της C# 3.0. Λέγεται Collection initializer, Δες το θέμα "How to: Initialize a Dictionary with a collection initializer" στο MSDN. Θα δεις και ένα παράδειγμα ολόιδιο με το δικό σου!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Μα δεν θα έπρεπε να κάνει compile!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51990.aspx</link><pubDate>Thu, 25 Jun 2009 12:28:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51990</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51990.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=29&amp;PostID=51990</wfw:commentRss><description>Βλέποντας ένα από τα mock classes μου, έπεσα πάνω σε αυτό το κομμάτι κώδικα:&lt;br&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;int&lt;/span&gt;, CategoryBase&amp;gt;
            {
                { 0, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; Category(0, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, 0) },
                { 1, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; Category(1, 0, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, 0) },
                 ...........
                { 31, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; Category(31, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, 0) },
                { 32, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; Category(32, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;, 0) },
            };&lt;/span&gt;&lt;/pre&gt;Παρατηρήστε την προτελευταία γραμμή, όπου υπάρχει ένα κόμμα στο τέλος. Γιατί αυτός ο κώδικας κάνει compile κανονικά; Δεν θα έπρεπε να διαμαρτυρηθεί το IDE για &lt;i&gt;syntax error&lt;/i&gt; ή έστω &lt;i&gt;Argument Expected&lt;/i&gt;; Ξέρω ότι παρόμοια συμπεριφορά είναι επιτρεπτή στην C++ (C99 και μετά), αλλά μου φαίνεται μάλλον ασυνήθιστο για την C#. Υπάρχουν κι άλλα τέτοια "features" στην γλώσσα άραγε;&lt;br&gt;</description></item></channel></rss>