<?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>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9154.aspx</link><pubDate>Thu, 02 Feb 2006 19:45:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9154</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9154.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9154</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;mns 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;Καταλαβαίνω ότι προτιμάς VB αλλά δεν&amp;nbsp;την αντέχω&amp;nbsp;&lt;img src="/cs/emoticons/emotion-1.gif" alt="Smile [:)]" /&gt;&lt;/P&gt;
&lt;P&gt;&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;Όχι, όχι, με την C# δεν έχω κανένα πρόβλημα. Την μιλάω, απλά δεν είναι η μητρική μου γλώσσα. Έτσι κι αλλιώς έχω ανοιχτό τον &lt;A href="http://authors.aspalliance.com/aldotnet/examples/translate.aspx"&gt;translator &lt;/A&gt;από πίσω...&lt;/P&gt;
&lt;P&gt;Thanx, πάντως, θα δω τον κώδικα αργότερα.&lt;/P&gt;</description></item><item><title>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9153.aspx</link><pubDate>Thu, 02 Feb 2006 19:42:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9153</guid><dc:creator>Νατάσα Μανουσοπούλου</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9153.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9153</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/mistblue/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;cgeo 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;Ανατριχιαστικό ακούγεται, αλλά δώσε sample αν έχεις κάτι πρόχειρο. thanx.&lt;/P&gt;
&lt;P&gt;&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;Καταλαβαίνω ότι προτιμάς VB αλλά δεν&amp;nbsp;την αντέχω&amp;nbsp;&lt;img src="/cs/emoticons/emotion-1.gif" alt="Smile [:)]" /&gt;&lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt; &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;namespace&lt;/span&gt; ParallelHierarchies&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;class&lt;/span&gt; AllowedBAttribute : System.Attribute&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;public&lt;/span&gt; AllowedBAttribute(System.Type a_Class)&lt;br /&gt;  {&lt;br /&gt;   Class &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; a_Class;&lt;br /&gt;  }&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;readonly&lt;/span&gt; System.Type Class;&lt;br /&gt; }&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;class&lt;/span&gt; BaseA&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;public&lt;/span&gt; BaseA()&lt;br /&gt;  {&lt;br /&gt;   Name &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;this&lt;/span&gt;.GetType().ToString();&lt;br /&gt;  }&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;readonly&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; Name;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [AllowedB(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;typeof&lt;/span&gt;(DerivedB))]&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;class&lt;/span&gt; DerivedA : BaseA&lt;br /&gt; {&lt;br /&gt; }&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;class&lt;/span&gt; BaseB&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;virtual&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; Doit(BaseA a)&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;object&lt;/span&gt;[] attributes &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; a.GetType().GetCustomAttributes(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;typeof&lt;/span&gt;(AllowedBAttribute), &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;false&lt;/span&gt;);&lt;br /&gt;   &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt; (attributes.Length == 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;;&lt;br /&gt;&lt;br /&gt;   AllowedBAttribute attribute &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; attributes[0] &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;as&lt;/span&gt; AllowedBAttribute;&lt;br /&gt;   &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.GetType() !&lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; attribute.Class)&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;throw&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; System.ArgumentException(&lt;br /&gt;     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"B class should be of type {0}, is of type {1}"&lt;/span&gt;,&lt;br /&gt;      attribute.Class.FullName,&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.GetType().FullName),&lt;br /&gt;     &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"a"&lt;/span&gt;);&lt;br /&gt;  }&lt;br /&gt; }&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;class&lt;/span&gt; DerivedB : BaseB&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; Doit(BaseA a)&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;base&lt;/span&gt;.Doit(a);&lt;br /&gt;   &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;// Do something else&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt; }&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;class&lt;/span&gt; DerivedB2 : BaseB&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;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; Doit(BaseA a)&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;base&lt;/span&gt;.Doit(a);&lt;br /&gt;   &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;// Do something else&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Στο παρακάτω δείγμα, το πρώτο Doit πετυχαίνει, το δεύτερο ρίχνει exception:&lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt; &lt;br /&gt;&lt;br /&gt;   BaseA a &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; DerivedA();&lt;br /&gt;   BaseB b &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; DerivedB();&lt;br /&gt;   b.Doit(a);&lt;br /&gt;&lt;br /&gt;   b &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; DerivedB2();&lt;br /&gt;   b.Doit(a);&lt;/span&gt;&lt;/P&gt;</description></item><item><title>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9152.aspx</link><pubDate>Thu, 02 Feb 2006 19:27:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9152</guid><dc:creator>spantos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9152.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9152</wfw:commentRss><description>Καταρχήν να ζητήσω συγνώμη αλλά δεν είμαι πολύ εξοικιωμένος με VB.&lt;br&gt;Εν συνεχεία να ρωτήσω γιατί χρειάζεσαι να περάσεις σαν παράμετρο στη SaveObject ένα instance του object αφού έχεις ήδη πρόσβαση σε αυτό μέσω του this (C#) ή του me στη VB;&lt;br&gt;Αν έχω καταλάβει κάτι από αυτό που θέλεις να κάνεις κάτι τέτοιο ίσως σε βοηθήσει:&lt;br&gt;	public interface BaseObject&lt;br&gt;	{&lt;br&gt;		public void SaveObject();&lt;br&gt;	}&lt;br&gt;&lt;br&gt;	public class CustomObject : BaseObject&lt;br&gt;	{&lt;br&gt;		private int id;&lt;br&gt;		private string name;&lt;br&gt;&lt;br&gt;		public void SaveObject()&lt;br&gt;		{&lt;br&gt;			//Persist properties using this accessor&lt;br&gt;			//this.id&lt;br&gt;			//this.name&lt;br&gt;		}&lt;br&gt;	}&lt;br&gt;Ελπίζω να σε βοήθησα...</description></item><item><title>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9151.aspx</link><pubDate>Thu, 02 Feb 2006 19:19:33 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9151</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9151.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9151</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;mns 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;UL&gt;
&lt;LI&gt;Μια factory κλάση που για το κάθε Α σου δίνει το κατάλληλο Β &lt;/LI&gt;
&lt;LI&gt;Έναν τρόπο σε όλες τις υλοποιήσεις της DoSomething που ελέγχει ότι το BaseA που του έχει περαστεί σαν παράμετρος είναι του σωστού τύπου. Αυτό μπορείς να το κάνεις είτε στατικά (με κώδικα) είτε π.χ. βάζοντας σε όλες τις DerivedB κλάσεις ένα δικό σου attribute που να λέει σε ποια DerivedA αντιστοιχεί, και την BaseB.DoSomething να διασταυρώνει το attribute αυτό με τον πραγματικό τύπο της παραμέτρου της.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Αν θέλεις sample κώδικα πες το.&lt;/P&gt;
&lt;P&gt;&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;Ανατριχιαστικό ακούγεται, αλλά δώσε sample αν έχεις κάτι πρόχειρο. thanx.&lt;/P&gt;</description></item><item><title>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9150.aspx</link><pubDate>Thu, 02 Feb 2006 19:17:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9150</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9150.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9150</wfw:commentRss><description>... τώρα βέβαια που το ξαναβλέπω, συνειδητοποιώ οτι δε λύνει το πρόβλημά σου αυτό, δεν κάνει δηλαδή force τον overrider να κάνει implement τη μέθοδο που θές, με τις παραμέτρους που θές. &lt;br&gt;&lt;br&gt;Σαν εναλλακτική, προτείνω κάποια runtime type checks στη base class, έτσι ώστε να σιγουρεύεις οτι η παράμετρος είναι του σωστού τύπου, σε συνδυασμό με κάποιες άλλες MustOverride μεδόδους χωρίς παραμέτρους. Ίσως λίγο αργότερα βρώ λίγο χρόνο να κοιτάξω κάποιες περιπτώσεις και κάνω post κάποιο παράδειγμα.</description></item><item><title>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9149.aspx</link><pubDate>Thu, 02 Feb 2006 19:16:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9149</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9149.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9149</wfw:commentRss><description>Το virtual (overridable) μου λέει ότι αν θέλει η child κλάση μπορεί να κάνει override, αλλά δεν την υποχρεώνει να το κάνει. Εγώ θέλω να την υποχρεώσω. (Είμαι αυστηρός με τις κλάσεις μου.. με καρότο και μαστίγιο τις έχω :-)</description></item><item><title>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9148.aspx</link><pubDate>Thu, 02 Feb 2006 19:15:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9148</guid><dc:creator>Νατάσα Μανουσοπούλου</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9148.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9148</wfw:commentRss><description>&lt;P&gt;Αυτό που θέλεις να κάνεις δεν είναι εφικτό, γιατί όταν υλοποιείς ένα interface ή κάνεις override μια virtual function πρέπει να σεβαστείς 100% το prototype της, οπότε δεν μπορείς να αλλάξεις τον τύπο των παραμέτρων.&lt;/P&gt;
&lt;P&gt;Αν κατάλαβα καλά, αυτό που θέλεις να κάνεις είναι το (;;; ποιο είναι το όνομά του; δεν έχω το GoF εδώ) pattern, στο οποίο έχεις δύο παράλληλες ιεραρχίες κλάσεων: Α και Β, και κάθε μια από τις&amp;nbsp;κλάσεις της Β&amp;nbsp;υλοποιεί ορισμένες λειτουργίες πάνω στην αντίστοιχη κλάση της Α.&lt;/P&gt;
&lt;P&gt;Στην περίπτωση αυτή, όλες οι κλάσεις της B θα κάνουν override την DoSomething(BaseA) και θα την υλοποιούν για κάποιο DerivedA. Θέλεις λοιπόν:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Μια factory κλάση που για το κάθε Α σου δίνει το κατάλληλο Β&lt;/LI&gt;
&lt;LI&gt;Έναν τρόπο σε όλες τις υλοποιήσεις της DoSomething που ελέγχει ότι το BaseA που του έχει περαστεί σαν παράμετρος είναι του σωστού τύπου. Αυτό μπορείς να το κάνεις είτε στατικά (με κώδικα) είτε π.χ. βάζοντας σε όλες τις DerivedB κλάσεις ένα δικό σου attribute που να λέει σε ποια DerivedA αντιστοιχεί, και την BaseB.DoSomething να διασταυρώνει το attribute αυτό με τον πραγματικό τύπο της παραμέτρου της.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Αν θέλεις sample κώδικα πες το.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9147.aspx</link><pubDate>Thu, 02 Feb 2006 19:10:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9147</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9147.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9147</wfw:commentRss><description>Το έλυσα προσωρινά με inherit και δήλωση της παραμέτρου σαν object. Στις child κλάσεις μόλις παίρνω το object κάνω cast στον τύπο που θέλω. Αλλά αν υπήρχε κάποιος κομψότερος τρόπος θα με ενδιέφερε...</description></item><item><title>Απ: Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9146.aspx</link><pubDate>Thu, 02 Feb 2006 19:10:19 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9146</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9146.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9146</wfw:commentRss><description>Σε C#, πάει κάπως έτσι:&lt;br&gt;&lt;br&gt;

&lt;p class="MsoNormal" style="text-indent: 36pt;"&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;public&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; &lt;span style="color: blue;"&gt;abstract&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt;
BaseObject {&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; SaveObject(BaseObject obj) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;







&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Console.WriteLine("lililili");&lt;br&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;
&lt;span style="color: blue;"&gt;class&lt;/span&gt; DerivedObject : BaseObject {&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; SaveObject(DerivedObject obj){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;Console.WriteLine("lalalala");&lt;br&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&amp;nbsp;

άν δε με απατά η μνήμη μου ( και ... "πιστεύω πως δε με απατά"&amp;nbsp; - famous last words) σε VB είανι το ίδιο, μόνο που όπου abstract βάνουμε MustInherit, κι όπου new βάνουμε Shadows κι όπου virtual βάνουμε overridable.&lt;br&gt;&lt;br&gt;Τώρα, αν δείς μετά την κλάσση σου με intellisense, θα σου δείξει δυστυχώς και τις δύο μεθόδους, και ο developer έχει την ευχέρεια να καλέσει οποιαδήποτε απ'τις δύο. Δε νόμίζω όμως οτι μπορείς να κάνεις κάτι παραπάνω απ'αυτο αν κρίνω κι απ'το intellisense σε framework classes, όπου έχω δεί την ίδια συμπεριφορά. &lt;br&gt;&lt;br&gt;Καλή μας μέρα, μιας κι έβγαλε και ήλιο σήμερα ... &lt;br&gt;</description></item><item><title>Inheritance</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9145.aspx</link><pubDate>Thu, 02 Feb 2006 18:30:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9145</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9145.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9145</wfw:commentRss><description>&lt;P&gt;Θέλω να φτιάξω μια mustinherit κλάση (ή ένα interface)&amp;nbsp;η οποία θα γίνεται inherit (ή&amp;nbsp;implement)&amp;nbsp;από κάποιες άλλες, προκειμένου να εξασφαλίσω ότι οι inherited κλάσεις θα έχουν κάποιο ελάχιστο functionality.&lt;/P&gt;
&lt;P&gt;Θέλω πχ, όλες οι child κλάσεις να έχουν μια μέθοδο SaveObject(object As BaseObject), αλλά όχι με BaseObject, αλλά με κάποια κλάσεις που κάνουν inherit το BaseObject.&lt;/P&gt;
&lt;P&gt;Το ιδανικό μου θα ήταν, να έχω ένα interface που να έχει το εξής declaration:&lt;/P&gt;
&lt;P&gt;Sub SaveObject(object As BaseObject)&lt;/P&gt;
&lt;P&gt;και οι κλάσεις που κάνουν implement το interface να έχουν:&lt;/P&gt;
&lt;P&gt;Sub SaveObject(object as CustomObject) implements IMyInterface.SaveObject&lt;/P&gt;
&lt;P&gt;όπου βεβαίως το CustomObject κάνει inherit το BaseObject.&lt;/P&gt;
&lt;P&gt;Πως;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>