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

 

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

Interface Implementation

Îåêßíçóå áðü ôï ìÝëïò infoCENTER. Τελευταία δημοσίευση από το μέλος infoCENTER στις 25-01-2010, 14:05. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  23-01-2010, 20:00 56626

    Interface Implementation

    Να περιγράψω λίγο την σκέψη μου.

    Όλοι γνωρίζουμε την χρησιμότητα που έχουν τα Interfaces σε OOP. Δυστυχώς όμως δεν περιέχουν καθόλου implementation.

    Ένα από τα πράγματα που με ενοχλεί στην VB.Net είναι ότι οι classes μπορούν να κάνουν inherit μόνο από μία άλλη class. Οπότε καταλαβένεται πως αν μία κλάση κάνει inherit από μία άλλη και παράλληλα θέλει να υλοποιήσει και ένα interface θα πρέπει να γράψω το implementation του interface. Φανταστείτε λοιπόν το implementation να γράφεται για κάθε κλάση που θέλουμε να υλοποιεί αυτό το interface και ταυτόχρονα να είναι inherited από μία άλλη.

    Σκεφτόμουν λοιπόν αν υπάρχει κάποια εντολή(;) όπου να μπορώ να κάνω implement ένα interface και όταν αναφέρομαι στο interface αυτό η κλάση μου να εκτελεί το implementation που έχω ήδη συνδέση με αυτό το Interface. Ελπίζω να με καταλάβατε. Γίνεται κάτι τέτοιο;

  •  23-01-2010, 20:40 56628 σε απάντηση της 56626

    Απ: Interface Implementation

    Classes μπορουν να κανουν inherit απο Interfaces sth VB.NET. Αυτο που προσπαθεις να κανεις μπορει να γινει για παραδειγμα απο ενα class method που κανει implement ενα Interface Method και μετα καθε αλλη  class κανει Inherit απο αυτο το class. Ετσι χρειαζεται να κανεις implement to method μονο μια φορα... Κοιτα το παρακατω κδικο για αναφορα: (console app)

    Module Module1

    Sub Main()

    Dim cls As Class2 = New Class2

    cls.Method2()

    cls.Method1()

    Console.Read()

    End Sub

    End Module

    Public Interface Test

    Sub Method1()

    End Interface

    Public Class Class1

    Implements Test

    Sub Method1() Implements Test.Method1

    Console.WriteLine("My method implemented Method1 from Interface")

    End Sub

     

     

    End Class

    Public Class Class2

    Inherits Class1

    Sub Method2()

    Console.WriteLine("Method2 from Class2")

    End Sub

    End Class

  •  24-01-2010, 13:17 56636 σε απάντηση της 56626

    Απ: Interface Implementation

    Αυτό που ζητάς μου φαίνεται είναι η abstract class.

    παράδειγμα γενικό:

    έχεις ένα Interface ISomthing

    έχεις μια abstract class BaseSomething που κάνει Inherit το Interface ISomething, και όπου μπορείς να γράψεις το implementation των methods του ISomething, ορίζοντας της συναρτήσεις αυτές ως virtual, για να μπορείς να τις κάνεις και override.

    Τέλος, έχεις την class MySomething Inherits BaseSomething, όπου οι συναρτήσεις του ISomething υπάρχουν ήδη με το implementation που έχεις γράψει. Αν θες να το προσπεράσεις τις κάνεις override.

    Περισσότερα δε γράφω γιατί είναι βασικά θέματα που είτε έχουν ήδη ερωτηθεί είτε υπάρχουν στο MSDN ή σε κάποιο από τα τρισεκατομμύρια βιβλία για OOP :-)


    Panagiotis Georgiadis
    HBM Netherlands B.V.
    www.twitter.com/HimWithCurls
  •  24-01-2010, 13:39 56638 σε απάντηση της 56626

    Απ: Interface Implementation

    Αν κατάλαβα καλά, θέλεις να κάνεις Inherit από μια κλάση και ένα Interface αλλά το Interface να έιναι "σύνδεμενο" σε κάποιο Implementation...
    Δεν γίνεται κάτι τέτοιο, θα πήγαινε αυτόματα στην λογική του Class Inheritance όπυ υπάρχει ήδη, αλλά όπως είπες δεν έχουμε multi inheritance
    σε .ΝΕΤ. Το πρώτο πράγμα που μου έρχετε στο μυαλό είναι να κάνεις Implement το Interface στην κλάση που κάνεις Inherit...τώρα αν διάφορες
    κλάσεις κάνουν inherit απο άλλη κλάση και πρέπει να έχεις και το implementation του Interface όπως λές. φτιάξε μια "Base" class που κάνει
    implement το Interface και όλες οι κλάσεις που θες να κάνουν inherit από την "Base".



  •  25-01-2010, 14:05 56659 σε απάντηση της 56638

    Απ: Interface Implementation

    Ευχαριστώ για τις απαντήσεις.

    Την προσέγγιση με το Base Class το οποίο κάνει implement ένα Interface και όλες οι κλάσεις κάνουν inherit από αυτήν την γνωρίζω.

    Υπάρχουν όμως κάποιες περιπτώσεις όπου το να το κάνω αυτό φέρνει αρκετές αλλαγές στο inheritance tree και δεν το επιθυμούσα στην περίπτωση αυτή. Για αυτό και σκέφθηκα να μπορούσε κάποιο interface να γίνει bind με κάποιο implementation.

    Νομίζω όμως πως από τις απαντήσεις δεν γίνεται...

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