<?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/74/ShowForum.aspx</link><description>Τα πρώτα βήματα στις γλώσσες VB6, VB.NET, και C#</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Πως λυνουμε το προβλημα τα strings να ειναι readonly στην c#;</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/7365.aspx</link><pubDate>Mon, 28 Nov 2005 19:49:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:7365</guid><dc:creator>rousso</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/7365.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=7365</wfw:commentRss><description>Σωστή η παρατήρηση Παναγιώτη. &lt;br&gt;&lt;br&gt;Διευκρινίζω ότι εννοείς ότι αν το assembly με το declaration (ας πούμε A.dll) γίνει recompile χωρίς να γίνει recompile το assembly με το "reference" (ας πούμε B.dll), τότε το δεύτερο assembly (δηλαδή το B.dll) έχει ήδη hardcoded την τιμή που ήταν δηλωμένη στο const κατά την διάρκειτα του τελευταίου compilation του B.dll. Οπότε μπορεί το assembly A.dll σε μεταγενέστερο compilation να έχει μια διαφορετική τιμή για την ίδια const από εκείνη που έχει το B.dll από προγενέστερο compilation....&lt;br&gt;&lt;br&gt;Σωστό! Δεν μου είχε τύχει ποτέ αλλά λογικά έτσι είναι...&lt;br&gt;&lt;br&gt;bugger!&lt;br&gt;</description></item><item><title>Απ: Πως λυνουμε το προβλημα τα strings να ειναι readonly στην c#;</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/7363.aspx</link><pubDate>Mon, 28 Nov 2005 19:23:47 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:7363</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/7363.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=7363</wfw:commentRss><description>Το γεγονός ότι ο compiler αντικαθιστά τις αναφορές στα const με τις τιμές τους έχει μια σχετικά περίεργη συνέπεια. Αν ένα assembly χρησιμοποιεί ένα const που ορίστηκε σε άλλο assembly και η τιμή του const αλλάξει, το πρώτο assembly θα συνεχίσει να χρησιμοποιεί την πρώτη τιμή. &lt;br&gt;&lt;br&gt;Όσον αφορά τον compiler, const σημαίνει const για πάντα, οπότε μπορεί να κάνει οποιουδήποτε είδους optimization θέλει.</description></item><item><title>Απ: Πως λυνουμε το προβλημα τα strings να ειναι readonly στην c#;</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/7356.aspx</link><pubDate>Mon, 28 Nov 2005 08:55:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:7356</guid><dc:creator>rousso</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/7356.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=7356</wfw:commentRss><description>&lt;P&gt;Μια και το πιάσαμε το θέμα να προθέσω κι εγώ έναν 3ο τρόπο για readonly &lt;STRONG&gt;properties&lt;/STRONG&gt; και να κάνω και τις διευκρινήσεις μου για τα &lt;STRONG&gt;const &lt;/STRONG&gt;και &lt;STRONG&gt;readonly keywords&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Κατ' αρχήν&amp;nbsp;για να μην&amp;nbsp;αναρωτιέται κανείς γιατί να υπάρχει το &lt;STRONG&gt;readonly&lt;/STRONG&gt; keyword όταν έχουμε ήδη το &lt;STRONG&gt;const&lt;/STRONG&gt; (που μπορεί να πει κανείς ότι κληρονομήθηκε από την C), σημειώνω ότι το &lt;STRONG&gt;readonly&lt;/STRONG&gt; keyword προστέθηκε για να δώσει την δυνατότητα να φτιάχνεις "σταθερές" των οποίων την τιμή την αποφασίζεις την ώρα που τρέχει η εφαρμογή και όχι την ώρα που κάνεiς compile.&amp;nbsp;Το &lt;STRONG&gt;const&lt;/STRONG&gt; keyword απαίτεί η τιμή να είναι γνωστή και σταθερή την ώρα του compilation. Οπότε δεν μπορείς να κάνεις assign σε ένα &lt;STRONG&gt;const&lt;/STRONG&gt; τίποτα του οποίου η τιμή δεν είναι γνωστή την ώρα του compile. Αντίθετα μια &lt;STRONG&gt;readonly&lt;/STRONG&gt; μεταβλητή, είναι μια κοινή μεταβλητή για την οποία απλά υπάρχει περισοριμσός στο πότε μπορείς να κάνεις ένα assgnment σε αυτήν. Το assignment σε μια &lt;STRONG&gt;readonly&lt;/STRONG&gt; επιτρέπεται μόνο στο declaration ή/και στον constructor της class που την ορίζει. Τον έλεγχο για το που γίνεται το assignment τον κάνει ο compiler. Οπότε δηλώνοντας μια κοινή μεταβλητή σαν readonly είναι σαν να λες στον Compiler: "μην με αφήσεις να την κάνω assign πουθενά αλλού εκτός από τον constructor ή το declaration". Αντίθετα αν δηλώσεις &lt;STRONG&gt;const&lt;/STRONG&gt; ο compiler δεν φτιάχνει καμία μεταβλητή (ούτε καν σύμβολο) αλλά χρησιμοποιεί&amp;nbsp;απευθείας&amp;nbsp;την σταθερή τιμή που θέτεις στην σταθερή σου όπου και αν την χρησιμοποιείς στον κώδικά σου. Δεν ξέρω τι ακριβώς κάνει ο compiler της C# αλλά υποθέτω ότι κάνει το αντίστοιχο με τους παλιότερους compilers της C και της assembly (δηλαδή βάζει hardcoded στον κώδικα μηχανής που παράγει (την IL στην συγκεκριμένη περίπτωση) την τιμή της σταθερής σου.&lt;/P&gt;
&lt;P&gt;Επίσης θα ήθελα να για μην γίνει κανένα μπέρδεμα να σημειώσω μια και ανέφερε ο φίλος cap την φράση "readonly properties" ότι δεν μιλάμε για properties. Τα properties δεν είναι μεταβλητές ή σταθερές. Τα properties είναι κώδικας στην ουσία. Δεν αντιπροσωπεύουν θέσεις μνήμης. Για να τα γράψεις και να τα διαβάσεις χρησιμοποιούν accessors (set και get αντίστοιχα).&amp;nbsp;Οι accessors&amp;nbsp;είναι στην πραγματικότητα methods.&amp;nbsp;Οπότε δεν μπορείς να δηλώσεις ένα property ως const ή readonly.&lt;/P&gt;
&lt;P&gt;Έχοντας καλύψει το παραπάνω προσθέτω και τον εξής 3ο τρόπο για να έχεις μια readonly τιμή στην εφαρμογή σου εκτός από το να φιτάξεις ένα const ή ένα readonly field: Μπορείς να φτιάξεις ένα property χωρίς set accessor. Δεν μπάινω σε λεπτομέρειες. Αν κάποιος δεν ξέρει τις λεπτομέρειες κι έχει απορίες μπορεί να ρωτήσει, αλλά συνοπτικά μπορείς με τον τρόπο αυτό να έχεις ένα property το οποίο μπορεί να το γράφει όποτε θέλει η class που το ορίζει ενώ ταυτόχρονα δεν μπορεί παρά μόνο να διαβάζει οποιοδήποτε άλλο class.&lt;/P&gt;
&lt;P&gt;φιλικά&lt;BR&gt;rousso&lt;/P&gt;</description></item><item><title>Απ: Πως λυνουμε το προβλημα τα strings να ειναι readonly στην c#;</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/7354.aspx</link><pubDate>Mon, 28 Nov 2005 07:08:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:7354</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/7354.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=7354</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;Aris wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt; 
&lt;P&gt;Έχεις δύο επιλογές:&lt;BR&gt;1. τα δηλώνεις &lt;FONT face="Courier New" color=#000080&gt;const &lt;/FONT&gt;Σε αυτή την περίπτωση θέτεις την τιμή&amp;nbsp;κατά την δήλωση.&lt;BR&gt;Π.χ. &lt;FONT face="Courier New" color=#000080&gt;public const string MyString="TheString";&lt;/FONT&gt;&lt;BR&gt;2. τα δηλώνεις&amp;nbsp;&lt;FONT face="Courier New" color=#000080&gt;readonly&lt;/FONT&gt; Σε αυτή την περίπτωση θέτεις την τιμή&amp;nbsp;ή κατά την δήλωση ή στον constructor. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Επειδή η δεύτερη πρόταση, παρ'ότι είναι πολύ σωστή, ίσως να σε μπερδέψει, να επεκτείνω τα λεγόμενα του Αρη λέγοντας οτι στη λύση νο.2 μιλάμε φυσικά για readonly properties. Τα properties "κρύβουν" συνήθως πίσω τους μια private μεταβλητή, και μπορούν να είναι φυσικά μόνο για ανάγνωση (read only). Τα υπόλοιπα είναι όπως ακριβώς τα περιγράφει ο Αρης, αλλά αν χρειαστείς περαιτέρω διευκρινίσεις, εδώ είμαστε!&lt;/P&gt;</description></item><item><title>Απ: Πως λυνουμε το προβλημα τα strings να ειναι readonly στην c#;</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/7334.aspx</link><pubDate>Sun, 27 Nov 2005 06:34:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:7334</guid><dc:creator>Aris</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/7334.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=7334</wfw:commentRss><description>&lt;P&gt;Έχεις δύο επιλογές:&lt;BR&gt;1. τα δηλώνεις &lt;FONT face="Courier New" color=#000080&gt;const &lt;/FONT&gt;Σε αυτή την περίπτωση θέτεις την τιμή&amp;nbsp;κατά την δήλωση.&lt;BR&gt; Π.χ. &lt;FONT face="Courier New" color=#000080&gt;public const string MyString="TheString";&lt;/FONT&gt;&lt;BR&gt;2. τα δηλώνεις&amp;nbsp;&lt;FONT face="Courier New" color=#000080&gt;readonly&lt;/FONT&gt; Σε αυτή την περίπτωση θέτεις την τιμή&amp;nbsp;ή κατά την δήλωση ή στον constructor. &lt;/P&gt;
&lt;P&gt;Πρακτικά, η πρώτη λύση είναι για static constants σε επίπεδο class ή για constants σε επίπεδο μεθόδου.&lt;BR&gt;Η δεύτερη είναι σαφώς πιό ευέλικτη:&lt;BR&gt;-&amp;nbsp;Αρχικοποιείς όταν εκτελείται ο constructor, πράγμα που σημαίνει ότι μπορείς να την διαβάσεις από κάπου (config file, database)&lt;BR&gt;- Υπάρχει, σε επίπεδο class ευελιξία να έχεις static readonly (κοινά για όλα τα instances του class,&amp;nbsp;αρχικοποιείς με&amp;nbsp;static constructor) και instance readonly, με αρχικοποίηση στον instance constructor.&lt;/P&gt;
&lt;P&gt;Reference: &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfReadonlyPG.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfReadonlyPG.asp&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Άρης&lt;/P&gt;</description></item><item><title>Πως λυνουμε το προβλημα τα strings να ειναι readonly στην c#;</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/7332.aspx</link><pubDate>Sun, 27 Nov 2005 05:07:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:7332</guid><dc:creator>angarato_surion</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/7332.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=7332</wfw:commentRss><description>Πως λυνουμε το προβλημα τα strings να ειναι readonly στην c#;&lt;br&gt;</description></item></channel></rss>