Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Σας παραθέτω καποιες κλάσεις. Προσπαθώ μέσα από αυτές να καταλάβω την εννοια του interface.

 

>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{
   class Program
   {
       static void Main(string[] args)
       {
           FlyDuck papaki1 = new FlyDuck();
           SwimFlyDuck papaki2 = new SwimFlyDuck();
           Console.ReadLine();
       }
   }

   public abstract class Duck
   {
       private string name;

       public void setName(string name)
       {
           this.name = name;
       }

       public string getName()
       {
           return this.name;
       }
   }

   public class FlyDuck : Duck
   {

   }

   public class SwimFlyDuck : Duck
   {

   }

   public interface FlyBehavior
   {
       void flying();
   }

   public class fly : FlyBehavior
   {
       public void flying()
       {
           Console.WriteLine("FLYYYYYY");
       }
   }

   public interface SwimBehavior
   {
       void swimming();
   }

   public class swim : SwimBehavior
   {
       public void swimming()
       {
           Console.WriteLine("SWIMMMMMM");
       }
   }

}

 

έχω 1 abstract κλάση Duck και 2 κλάσεις (FlyDuck,SwimFlyDuck) που την υλοποιούν.

 

Επίσης έχω 2 interfaces που το ένα υλοποιεί το Fly και το αλλο το Swim.

 

Θέλω τα αντικείμενα της FlyDuck να μπορουν να τρεχουν την υλοποιηση της Fly,

και τα αντικείμενα της SwimFlyDuck να μπορούν να τρεχουν και την υλοποιηση της Fly και της Swim...

 

Ελπίζω να το εξήγησα καλά....

Δημοσ.

Καταρχήν, το βιβλίο απ όπου το διαβάζεις αυτό (που αν δε κάνω λάθος είναι το Head First Desing Patterns) διατυπώνει κώδικα για Java.

Δεν έχει κάποια διαφορά σημαντική (Σε αυτό το επίπεδο τουλάχιστον) η Java από C# απλά, πληροφοριακά, αυτό με τις setName, getName συναρτήσεις που είναι "κουλτούρα" της Java στην C# συναντάται κάπως αλλιώς, με τα πεδία Properties.

 

Επαναλαμβάνω, το λέω απλά προς πληροφόρηση. Τρέχει και έτσι σε C#.

 

Τώρα, σε κάθε κλάση μπορείς να κληρονομήσεις από όσα Interfaces θες αλλά απο μόνο μία Κλάση (ή Abstract ).

 

Συνεπώς εδώ μπορείς να κάνεις αυτό.

>
   public class FlyDuck : Duck, FlyBehavior
   {
       public void flying()
       {
           Console.WriteLine("FLYYYYYY");
       }
   }

   public class SwimFlyDuck : Duck, FlyBehavior, SwimBehavior 
   {
       public void flying()
       {
           Console.WriteLine("FLYYYYYY");
       }
       public void swimming()
       {
           Console.WriteLine("SWIMMMMMM");
       }
   }

 

Απλά επαναλαμβάνεις τον κώδικα του flying.

 

Οπότε θα έλεγα οτι κατι τέτοιο είναι καλύτερο.

>
   public abstract class FlyingDuck: Duck, FlyBehavior
   {
       public void flying()
       {
           Console.WriteLine("FLYYYYYY");
       }
   }


   public class FlyDuck : FlyingDuck
   {
       
   }
   public class SwimFlyDuck : FlyingDuck, SwimBehavior 
   {
       public void swimming()
       {
           Console.WriteLine("SWIMMMMMM");
       }
   }

 

Υ.Γ.

Επίσης πληροφοριακά.

Στον χώρο του .ΝΕΤ συνηθίζεται κάτι (κατά τη γνώμη μου ανούσιο, απλά λίγο βολικό στο μάτι).

Η ονομασία των interfaces ξεκινά πάντα με ένα κεφαλαίο I.

Δηλαδή: IFlyBehavior, ISwimBehavior

Δημοσ.

Το interface σε βοηθαει να δημιουργησεις μια διεπαφη του αντικειμενου σου με καποιο αλλο. Επισης δεν χριεαζεται τα αντικειμενα που εχουν το X interface να ειναι ιδια στην ιδεολογια τους.

 

 

Πχ

>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
   class MyResource
       : IDisposable
   {
       public MyResource()
       {
           Console.WriteLine("Created-> {0}",this);
       }
       void IDisposable.Dispose()
       {
           Console.WriteLine("Cleanup-> {0}",this);
       }
   }
   class Program
   {
       static void Main(string[] args)
       {
           using (var myResource = new MyResource())
           {
               
           }
           Console.Read();
       }
   }
}

 

 

Το keyword abstract μας λεει οτι μια κλαση/μεθοδος/ιδιοτητα ειναι ημιτελης.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...