PDA

View Full Version : Domanda Polimorfismo (c#)


mutaforme
28-10-2016, 13:45
Scusate potreste dirmi se è corretto concettualmente un codice del genere (mi riferisco a PrintTarga )?
Secondo me non è il massimo della programmazione ad oggetti.
Il casting da Car ad una classe che lo estende, secondo voi è "pulito"?
ps Per velocizzare ho messo tutto public, ma mi interessa sapere se l'uso di is... è corretto concettualmente.



class Car ()
{
public string targa="";
}

class Ferrari () : Car
{
public string targaSpeciale="";
}

class Mercedes () : Car
{
public string targaStraniera="";
}


Funzione nel mainProgram:

void PrintTarga (Car A)
{

if (A is Ferrari)
{
Ferrari B=(Ferrari)A;
Console.Writeline(A.targa+B.targaspeciale);
// do something about Ferrari...
}
else if (A is Mercedes)
{
Mercedes B=(Mercedes)A;
Console.Writeline(A.targa+B.targaStraniera);
//do something about Mercedes...
}
else
{
Console.WriteLine(A.targa)
}

}

Amsirak
30-10-2016, 01:09
Non so cosa intenda con "pulizia", ma questo modo di scrivere codice è poco estendibile.
Il mainProgram non dovrebbe essere al corrente dell'implementazione di ogni singola subclass di Car.

Ci sono diverse soluzioni possibili, una potrebbe essere:

public interface Car ()
{
public string getTarga();
}

public class Generic : Car
{
private string targa = 'aa000bb';

public string getTarga(){
return targa;
}
}


public class Ferrari : Car
{
private string targa = 'aa000bb';
private string targaSpeciale = 'abcdef';

public string getTarga(){
return targa + targaSpeciale;
}
}

E, nel mainProgram:

void printTarga(Car A) {
print A.getTarga();
}