2009-05-05 13 views

risposta

41

No; l'overloading sta creando un metodo con lo stesso nome con una quantità diversa di parametri o con parametri di altro tipo.

Il polimorfismo consiste nel modificare l'implementazione/funzionalità di un metodo specifico tra vari tipi (che hanno tutti lo stesso 'tipo base').

sovraccarico:

public class TestClass 
{ 
    public void DoSomething(int a, int b) {} 

    public void DoSomething(int a, int b, string x) {} 
} 

Polimorfismo:

public abstract class Base 
{ 
    public abstract DoSomething(); 
} 

public class A : Base 
{ 
    public override DoSomething() 
    { 
     Console.WriteLine("I am A"); 
    } 
} 

public class B : Base 
{ 
    public override DoSomething() 
    { 
     Console.WriteLine("I am B"); 
    } 
} 
+0

Questo deve essere fatto tramite un'interfaccia corretta? –

+2

Non necessariamente un'interfaccia. Una classe base comune sarebbe sufficiente. – sharptooth

+2

Può essere fatto con un'interfaccia, una classe base o astratta. Il punto è che non importa quale sia il tipo specifico dell'oggetto. Deve solo essere indistinguibile dalla base ai fini dell'utilizzo della base; qualunque sia la base. –

9

La differenza tra il polimorfismo e sovraccarico metodo è nel momento in cui il metodo effettivo da eseguire è determinata. La ragione di questo è che quando un metodo è sovraccarico, come ad esempio in:

account = new BankAccount(); 
account = new BankAccount(1000); 

il compilatore può dire che costruttore da utilizzare per la firma del metodo, compreso il numero ei tipi di parametri forniti. Questa selezione di un metodo da utilizzare in fase di compilazione, prima che il programma venga eseguito, viene chiamata associazione anticipata. D'altra parte, quando usiamo una chiamata a un metodo polimorfico come x.getMeasure(), il metodo effettivo getMeasure() chiamato dipende da che tipo di oggetto si riferisce a x. Poiché gli oggetti non vengono creati fino all'esecuzione del programma, il metodo chiamato viene determinato in fase di esecuzione. Pertanto, la macchina virtuale, non il compilatore, seleziona il metodo appropriato. Questa selezione di metodo è chiamata late-binding.

1

No, non lo è.

Il sovraccarico si riferisce alla creazione di un metodo o di un operatore con lo stesso nome, ma diversi parametri e, a seconda della lingua, diversi tipi di ritorno.

override riferisce ad reimplementando un metodo con la stessa firma in una classe derivata e permette polimorfismo - la decisione quale attuazione di un metodo sovrascritto da chiamare è fatta in fase di esecuzione a seconda del tipo effettivo dell'oggetto.

class BaseClass 
{ 
    public void DoStuff(Int32 value) { } // Overloading 

    public void DoStuff(String value) { } // Overloading 

    public virtual void DoOtherStuff(String value) { } 
} 

class DerivedClass : BaseClass 
{ 
    public override void DoOtherStuff(String value) { } // Overriding 
} 

esempio di utilizzo

BaseClass instance = null; 

if (condition) 
{ 
    instance = new BaseClass(); 
} 
else 
{ 
    instance = new DerivedClass(); 
} 

// Using overloads 
instance.DoStuff(4); 
instance.DoStuff("four"); 

// Polymorphism - it depends on the actual type of the object 
// referenced by the variable 'instance' if BaseClass.DoOtherStuff() 
// or DerivedClass.DoOtherStuff() will be called at runtime. 
instance.DoOtherStuff("other stuff"); 
5

No.

Polymorphism è una caratteristica del linguaggio di programmazione che consente valori di tipi di dati da trattare utilizzando un'interfaccia uniforme. Il concetto di polimorfismo parametrico si applica sia ai tipi di dati che alle funzioni. Una funzione che può essere valutata o applicata a valori di tipi diversi è nota come funzione polimorfica. Un tipo di dati che può apparire di tipo generalizzato (ad es. Un elenco con elementi di tipo arbitrario) è designato come tipo di dati polimorfici come il tipo generalizzato da cui vengono effettuate tali specializzazioni.

Method overloading è una caratteristica nota in molti linguaggi di programmazione come Ada, C#, C++, D e Java che permette la creazione di vari metodi con lo stesso nome che differiscono l'uno dall'altro in termini di tipo di ingresso e il tipo di output della funzione.

L'overloading del metodo non deve essere confuso con il tipo polimorfismo o funzioni virtuali. In questi, il metodo corretto viene scelto in fase di esecuzione.

Fonte: Wikipedia.

Problemi correlati