Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

ερωτησεις γηρω απο inheritance

Îåêßíçóå áðü ôï ìÝëïò angarato_surion. Τελευταία δημοσίευση από το μέλος Νατάσα Μανουσοπούλου στις 11-04-2006, 08:57. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-04-2006, 14:26 11726

    ερωτησεις γηρω απο inheritance

    γεια σας  θα ηθελα να ρωτησω κατι .
    class base
    {
    public voidgetVersion();

    }

    class child:base
    {
    public void getVersion(){
    try
                {
                    string Ekdo = null;



                    Ekdo = Assembly.GetExecutingAssembly().GetName().Version.ToString();

                    return Ekdo;
                }
                catch (Exception e)
                {
                    return null;

                }

    }

    }

    πως αναγκαζουμε την εκτελεση της getVersion απο την child κλαση και οχι την εκτελεση της getVersion απο την base κλάση.

    γραφω ενα SDK για μια βιβλιοθήκη μου και θελω να βρησκω την εκδοση καθε plugin που εχει φορτωθεί  αλλα αντι για την εκδοση του plugin μου δινει την εκδοση του SDK. πως το διορθωνω αυτο;

    επισης πως κανουμε μια μεθοδο της  κλάσης base να μην μπορει να αλλάξει απο κάποιο Plugin;
    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  10-04-2006, 10:55 11746 σε απάντηση της 11726

    Απ: ερωτησεις γηρω απο inheritance

    Το πώς θα αποφύγεις την κλήση της getVersion απο τη base κλάσση, είναι μια "πονεμένη" ιστορία. Μπορείς να μαρκάρεις τη base method ως abstract και να μη δώσεις εκεί υλοποίηση, ή να την κάνεις virtual και να μπορεί να γίνει overriden σπο subclasses.

    To να κόψεις τη δυνατότητα να γίνει override μια μέθοδος, είναι πιο απλό. Απλώς μάρκαρέ τη ως sealed.
    Angel
    O:]
  •  10-04-2006, 16:45 11755 σε απάντηση της 11746

    Απ: ερωτησεις γηρω απο inheritance

    Αντικατέστησε το

    Ekdo = Assembly.GetExecutingAssembly().GetName().Version.ToString();

    με

    Ekdo = this.getType.Assembly.GetName().Version.ToString();

    ΥΓ:

    H GetExcecutingAssembly επιστρέφει το Assembly που έχει φορτωθεί στο Application Domain (πιθανώς το WindowsApplication) και όχι το assembly που περιέχει το Class Base.
    Σταύρος Βαλσάμης
    Προγραμματιστής
  •  10-04-2006, 19:02 11758 σε απάντηση της 11755

    Απ: ερωτησεις γηρω απο inheritance

    το δευτερό το εφτιαξά αλλα για το πρώτο δεν τα καταφερα γιατι λεει μια exception

    Error 1 'Hydrobase.hydrobaseADO.SendtoDataGrid(System.Windows.Forms.DataGridView, System.Data.DataSet, string, int)' cannot be sealed because it is not an override D:\Τα_Προγραμματά_μου\.Net\Hydrobase\Hydrobase\hydrobaseADO.cs 24 29 Hydrobase

    αυτο το βγαζει σε όλλες τις μεθοδους που θελω να κανω sealed.

    επισης η κληρονομικοτητα την κανω ως εξης .

    child:childbase

    {

    }

    childbase:base

    {

    }

    class plugin:child

    {

    }

    οι μεθοδοι ππυ θελω να γινουν sealed ειναι στην childbase.


    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  11-04-2006, 08:57 11771 σε απάντηση της 11726

    Απ: ερωτησεις γηρω απο inheritance

    Για να καλείται η υλοποίηση της derived κλάσης όταν έχεις reference στην base κλάση πρέπει η μέθοδός σου να έχει δηλωθεί ως virtual. Π.χ.



    class baseClass
    {
      public virtual string getVersion();
    }
    class childClass : baseClass
    {
    public override string getVersion()
    {
      // Implementation
    }

    BTW, το base είναι reserved word στη C#.


    Νατάσα Μανουσοπούλου
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems