<?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>.NET Framework</title><link>https://www.dotnetzone.gr:443/cs/forums/14/ShowForum.aspx</link><description>Θέματα για threading, remoting, reflection, exception handling, security, regex κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Πέρασμα ByVal παραμέτρου τύπου Generic.List(Of T) - ΓΙΝΕΤΑΙ????????</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10720.aspx</link><pubDate>Fri, 17 Mar 2006 00:31:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10720</guid><dc:creator>tnec</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10720.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=10720</wfw:commentRss><description>Ευχαριστώ πολύ</description></item><item><title>Απ: Πέρασμα ByVal παραμέτρου τύπου Generic.List(Of T) - ΓΙΝΕΤΑΙ????????</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10663.aspx</link><pubDate>Wed, 15 Mar 2006 06:49:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10663</guid><dc:creator>Δημήτρης Γκανάτσιος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10663.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=10663</wfw:commentRss><description>σε μια κλάση που κάνεις implement to ICloneable interface, υλοποιείς το deep copy ως εξής: (δεν είναι δύσκολη η μετατροπή σε VB)&lt;br&gt;&lt;br&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;#region&lt;/span&gt; ICloneable Members&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;object&lt;/span&gt; Clone()&lt;br /&gt;        {&lt;br /&gt;        MemoryStream buffer &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; MemoryStream();&lt;br /&gt;        BinaryFormatter formatter &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; BinaryFormatter();&lt;br /&gt;        formatter.Serialize(buffer,&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;);&lt;br /&gt;        buffer.Position &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; 0;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; formatter.Deserialize(buffer);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;#endregion&lt;/span&gt;&lt;/span&gt;&lt;br&gt;</description></item><item><title>Απ: Πέρασμα ByVal παραμέτρου τύπου Generic.List(Of T) - ΓΙΝΕΤΑΙ????????</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10628.aspx</link><pubDate>Tue, 14 Mar 2006 19:01:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10628</guid><dc:creator>tnec</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10628.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=10628</wfw:commentRss><description>Σας ευχαριστώ όλους για τις απαντήσεις σας. Το παραπάνω πρόβλημα προέκυψε δυστυχώς αφού είχα σχεδιάσει όλη την εφαρμογή, οπότε αν δεν υπάρχει κάποια "απλή" - άμεση λύση θα αναγκαστώ να αλλάξω όλη τη φιλοσοφία της ώστε να γίνει αυτό που λέμε σωστή δουλειά, και όχι μπαλώματα. Δηλαδή αντί για copy contractors κλπ που θέλουν χρόνο, νομίζω η διαφορετική σχεδίαση είναι πιο καλή λύση. &lt;br /&gt;&lt;br /&gt;Αυτό που θα με διευκόλυνε είναι να πω στη VB να περάσει αντίγραφο και όχι reference. Τελοσπάντων, αν δεν υπάρχει λύσει, δεν θα χάσουμε και τον ύπνο μας :)</description></item><item><title>Απ: Πέρασμα ByVal παραμέτρου τύπου Generic.List(Of T) - ΓΙΝΕΤΑΙ????????</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10613.aspx</link><pubDate>Tue, 14 Mar 2006 12:34:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10613</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10613.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=10613</wfw:commentRss><description>Μπορείς να αλλάξεις την custom κλάση σου σε struct. Από εκεί και πέρα, αντιγράφοντας τα structs αυτά από το ένα σημείο στο άλλο (προσοχή, όχι αντιγράφοντας τη λίστα που τα εμπεριέχει!), θα δημιουργηθούν αντίγραφα τους, και δε θα αντιγραφούν τα references.
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;Μια άλλη λύση που μου έρχεται στο μυαλό, αλλά είναι λίγο Overkill, έχει ως εξής: Ποια μέθοδος δημιουργεί σίγουρα αντίγραφα των δεδομένων σου; Το Serialization! Θα μπορούσες δηλαδή να κάνεις serialize και deserialize σε νέα λίστα, μέσω MemoryStream.
&lt;br&gt;&lt;br&gt;
&lt;br&gt;Μου φαίνεται όμως ότι η πρώτη λύση είναι και η πιο λογική (Νομίζω ωστόσο ότι το πρόβλημα αυτό το έχω ξανασυναντήσει, όταν έριχνα μια ματιά στο Prototype pattern).</description></item><item><title>Απ: Πέρασμα ByVal παραμέτρου τύπου Generic.List(Of T) - ΓΙΝΕΤΑΙ????????</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10612.aspx</link><pubDate>Tue, 14 Mar 2006 03:47:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10612</guid><dc:creator>tnec</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10612.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=10612</wfw:commentRss><description>Ωραία, αλλά πως κάνω ένα deep copy του αντικειμένου? Πως το φτιάχνω? Άμα κάνω Implement το IClonable και φτιάξω μια clone, το μόνο που γίνεται είναι Me.MemberwiseClone() (το object δεν έχει άλλη έτοιμη μέθοδο). Αλλά το MemberwiseClone για τα references αντιγράφει pointers!!!! Οπότε πέφτω πάλι στα ίδια</description></item><item><title>Απ: Πέρασμα ByVal παραμέτρου τύπου Generic.List(Of T) - ΓΙΝΕΤΑΙ????????</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10611.aspx</link><pubDate>Tue, 14 Mar 2006 03:38:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10611</guid><dc:creator>Δημήτρης Γκανάτσιος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10611.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=10611</wfw:commentRss><description>Αν υλοποιήσεις μια Clone μέθοδο για την κλάση Τ, στο οποίο επιστρέφεις ένα deep ή shallow copy του αντικειμένου, και μέσα στη function να δημιουργείς μία καινούρια list με τα αντίγραφα των αντικειμένων της λίστας;</description></item><item><title>Πέρασμα ByVal παραμέτρου τύπου Generic.List(Of T) - ΓΙΝΕΤΑΙ????????</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10609.aspx</link><pubDate>Tue, 14 Mar 2006 02:34:13 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10609</guid><dc:creator>tnec</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10609.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=10609</wfw:commentRss><description>&lt;P&gt;Λοιπόν έχω το εξής "απίστευτο" πρόβλημα. Έχω μια συνάρτηση που δέχεται σαν όρισμα μια λίστα τύπου generic.List(Of T) όπου T είναι μια δική μου κλάση μόνο με properties. Η συνάρτηση θέλω να επιστρέφει μια νέα λίστα την οποία δημιουργεί με βάση το όρισμα. Πιο συγκεκριμένα, η κάθε λίστα αντιπροσωπεύει μια κατάσταση σε ένα παιχνίδι, και η συνάρτηση πρέπει να δέχεται μια κατάσταση και να παράγει μια καινούρια. Το πρόβλημα είναι ότι δεν θέλω να χάνω την παλιά κατάσταση. Η συνάρτησή μου μέσα της δημιουργεί μια νέα λίστα, την&amp;nbsp;γεμίζει (AddRange) με τα στοιχεία του ορίσματος και κάνει πράξεις. Το&amp;nbsp;πρόβλημα είναι ότι όταν "γεμίζω" τη&amp;nbsp;νέα λίστα με&amp;nbsp;τα στοιχεία αυτής που περνάω ByVal στο όρισμα, η VB αντιγράφει μόνο τους δείκτες, με αποτέλεσμα, ΟΤΙ ΑΛΛΑΓΗ ΚΑΝΩ στην τοπική νέα λίστα, περνάει προφανώς στη λίστα πίσω από το όρισμα, και την καταστρέφει. Το θέμα είναι ότι χρειάζομαι ένα τρόπο για να μην πειράζει το όρισμα, δηλαδή θέλω να δημιουργεί νέο ανεξάρτητο αντίγραφο του ορίσματος στη μνήμη. Δηλαδή έχω:&lt;/P&gt;
&lt;P&gt;Λίστα1 -&amp;gt; θέλω να μην&amp;nbsp;την πειράξει κανένας, περνάει σαν όρισμα στη συνάρτηση (ας πούμε&amp;nbsp;διεύθυνση 1-100 στη μνήμη)&lt;BR&gt;Λίστα2 -&amp;gt; την δημιουργεί τοπικά η συνάρτηση για να κάνει πράξεις πάνω της και να την επιτρέφει με return Λίστα2 (ας πούμε διεύθυνση 101-200)&lt;/P&gt;
&lt;P&gt;Πώς θα γεμίσω την Λίστα2 με στοιχεία ίδια με αυτά της Λίστας1? Δοκίμασα Λιστα2=Λίστα1 και Λίστα2.AddRange(Λίστα1) και Λίστα2=new list(Of T)(Λιστα1) και γεμίζει τις θέσεις 101-200 με δείκτες στις θέσεις 1-100, κάτι που δεν θέλω. ΔΕΝ ΥΠΑΡΧΕΙ ΤΡΟΠΟΣ ΝΑ ΠΕΡΑΣΩ ΠΡΑΓΜΑΤΙΚΟ ΑΝΤΙΓΡΑΦΟ ΤΟΥ ΟΡΙΣΜΑΤΟΣ ΚΑΙ ΟΧΙ ΔΕΙΚΤΗ ΣΕ ΑΥΤΟ?????????????&lt;/P&gt;
&lt;P&gt;Οποιαδήποτε βοήθεια είναι ευπρόσδεκτη.&lt;/P&gt;
&lt;P&gt;Υ.Γ. Η Λίστα1 γεμίσει με μία procedure. Το να φτιάχνω από την αρχή πολλές ίδιες λίστες και μετά να τις περνάω (σαν δείκτη) στη συνάρτηση, δεν είναι πρακτικό, γιατί όπως έγραψα παραπάνω κάθε λίστα αντιπροσωπεύει μια διάταση-instance ενός παιχνιδιού, οπότε αν το κάνω έτσι θα είναι:&lt;/P&gt;
&lt;P&gt;1ο βήμα-&amp;gt;Λίστα1&lt;BR&gt;2ο βήμα-&amp;gt;function(Λίστα2)&lt;BR&gt;3ο βήμα-&amp;gt;function(function(Λίστα3))&amp;nbsp;&amp;nbsp;&amp;nbsp;κ.ο.κ και οι Λίστα1,Λίστα2,Λίστα3 κλπ φτιάχνονται αρχικά ίδιες&lt;/P&gt;
&lt;P&gt;οπότε αν έχω 300 βήματα στο παιχνίδι, θα γίνεται χαμός. ΓΙ ΑΥΤΟ ΑΝΑΖΗΤΩ ΤΡΟΠΟ να φτιάχνω επιτόπου αντίγραφο του ορίσματος και να καλώ &lt;/P&gt;
&lt;P&gt;NextStep=function(ThisStep), χωρίς να μου χαλάει το ThisStep&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>