PDA

View Full Version : [C#]Interfacce


Kleidemos
30-01-2003, 14:19
A che servono le interfaccie?
Da quel che ho capito dovrebbero essere classi astratte.
Ma a cosa servono????????'

Chi mi posta un esempio:D



Ciao&Tnk

Kleidemos
30-01-2003, 17:31
ap

Kleidemos
31-01-2003, 12:22
ap

atragon
31-01-2003, 19:06
Le interfacce sono molto simili a classi astratte con tutti i membri astratti. Sono utili nello sviluppo di classi che possono condividere le caratteristiche pur non facendo parte della medesima gerarchia. In C# non esiste l'ereditarietà multipla ma è possibile ereditare da più interfacce.

Kleidemos
31-01-2003, 19:10
mi fai un esempio di cod pratico???

atragon
31-01-2003, 19:20
E va bene....continuo a ritenere che leggere del gran codice senza prima studiarsi le basi sia un pessimo metodo...cmq, magari tu ti trovi meglio così...

using System;
interface somma // questa è l'interfaccia
{
int conta(int dati);
}
public class calcola: somma // definisco la classe a partire dall'interfaccia
{
public int conta(int dati)
{
int x = 10 + dati; // implemento il metodo
return x;
}
}
class test
{
public static void Main()
{
calcola som = new calcola();
int y = som.conta(3);
Console.WriteLine("Somma: " + y.ToString());
}
}


Non è un gran che come esempio, provalo perchè non l'ho compilato, non sono sul mio pc e qui non ho il framewok installato. Se qualcuno ha sotto mano di meglio....

Kleidemos
31-01-2003, 19:39
cioe io ho per esempio

interface Animale
{
void Muovi();
}

class Cane:Animale {
void Muovi(){
Console.WriteLine("Me sto a movere");
}
public static void Main() {
Cane inter = new Cane();
Cane.Muovi();
}
}



è esatto?

atragon
31-01-2003, 20:25
Così a occhio mi sembra proprio di no...
Cane.Muovi() ???? sarà inter.Muovi()
e nell'implementazione devi mettere un public davanti al metodo.

Kleidemos
31-01-2003, 20:26
cosi?


interface Animale
{
void Muovi();
}

public class Cane:Animale {
void Muovi(){
Console.WriteLine("Me sto a movere");
}
public static void Main() {
Cane inter = new Cane();
inter.Muovi();
}
}

atragon
31-01-2003, 20:30
No... così:

using System;
interface Animale
{
void Muovi();
}

class Cane: Animale {
public void Muovi(){
Console.WriteLine("Me sto a movere");
}
public static void Main() {
Cane inter = new Cane();
inter.Muovi();
}
}

Kleidemos
01-02-2003, 05:55
Originally posted by "atragon"

E va bene....continuo a ritenere che leggere del gran codice senza prima studiarsi le basi sia un pessimo metodo...cmq, magari tu ti trovi meglio così...


è che la skuola mi impedisce di leggere il libro ma io nn voglio perdere la mano :muro:

soalle
01-02-2003, 09:56
Comunque un'interfaccia generalmente serve quando vuoi che un tuo oggetto usi degli oggetti (indipendentemente da come essi siano fatti) che abbiano certe funzionalità...
Esempio:
oggetto A ha un metodo che serve per comprimere un suo documento -> ha bisogno di qualcuno che abbia i metodi comprimi e decomprimi -> crea un'interfaccia e dice che per comprimere ha bisogno di un oggetto con tale interfaccia -> a quel punto puoi realizzare tanti oggetti che implementano l'interfaccia (magari uno comprime in zip, uno in gz, uno in arj,....) -> l'oggetto A usa poi l'oggetto che gli interessa sicuro del fatto che implementa le funzionalità comprimi e decomprimi...

Spero di essere stato sufficientemente chiaro, senza crearti dei casini in testa...

Kleidemos
01-02-2003, 11:21
+ o -
Cioe io crea l'interfaccia compres con comprimi() e decompromi().
Poi creo la classe Zip e quella Rar in cui implemento in ogniuno comprimi() e decompromi() ............. è esatto?

soalle
01-02-2003, 11:25
classe zip e rar che implementano tale interfaccia:


public class Zip: ICompressione{
...
}


Poi esiste un altro componente a cui serve "qualcuno che sappia comprimere e decomprimere" -> quindi quest'altro componente userà Zip

Kleidemos
01-02-2003, 11:28
tipo cosi??????

using System;

interface ICompressione {
string comprimi(string path);
string decomprimi(string path);
}

public class Zip:ICompressione {
public string comprimi(string path) {
Console.WriteLine("Sto Comprimendo {}!\n", path);
}
public string decomprimi(string path) {
Console.WriteLine("Sto Decomprimendo {}!\n", path);
}
}

public class Rar:ICompressione {
public string comprimi(string path) {
Console.WriteLine("Sto Comprimendo {}!\n", path);
}
public string decomprimi(string path) {
Console.WriteLine("Sto Decomprimendo {}!\n", path);
}
}

soalle
01-02-2003, 12:58
Esatto...

Metafora:
E' come se un negozio abbia bisogno di un commesso (classe). Il commesso deve avere dei requisiti (implementa un'interfaccia) e i requisiti (interfaccia) sono: sapere l'inglese, sapere usare il computer, ... (metodi all'interno dell'interfaccia). Alla fine il negozio non cerca un dato commesso (classe) ma semplicemente "un" commesso che abbia i requisiti (cerca qualcuno che implementi l'interfaccia...)