Domanda

La C # 4.0 di ExpandoObject supporto Prototipo a base di eredità ? Se no, perché non (era dal disegno?) E come potrebbe essere implementato? Se sì, come funziona e quali differenze ci sono rispetto al modo in cui funziona in Javascript?

È stato utile?

Soluzione

  

La C # eredità supporto ExpandoObject Prototipo 4.0-based di?

Prima di tutto, si noti che la classe ExpandoObject non ha nulla a che fare con C # 4.0. La squadra # C non ha progettato o implementare questo oggetto. C # 4.0 e la classe di ExpandoObject semplicemente capita di entrambe nave con l'ultima versione di .NET.

Per rispondere alla tua domanda vi rimando alla documentazione per ExpandoObject, in cui si afferma chiaramente:

  

La classe ExpandoObject è un'implementazione del concetto di oggetto dinamico che consente di ottenere, l'impostazione, e invocando membri. Se si desidera definire tipi che hanno i loro propri semantica dinamica di spedizione, utilizzare la classe DynamicObject.

Come afferma documentazione, se si desidera personalizzati semantica di spedizione di cui sopra mera invocazione dei membri quindi utilizzare la classe DynamicObject.

  

Se no, perché no? era dal disegno?

Qualcuno potrebbe desiderare un oggetto expando ma quella persona potrebbe non desiderare né necessità prototipo eredità. Expando oggetti non logicamente richiedono alcuna forma di eredità.

  

come potrebbe essere implementato?

Utilizzare l'oggetto DynamicObject. Scrivi la tua meccanismo di ereditarietà di prototipi.

  

Se sì, come funziona e le differenze ci sono per il modo in cui funziona in Javascript?

Se si sta tentando di scrivere il proprio eredità prototipo che è esattamente come JScript di, vi incoraggio a leggere le specifiche ECMAScript molto con attenzione. Prototipo eredità sembra semplice, ma ci sono sottigliezze che maggior parte delle persone sbagliate. Ad esempio, anche gli esperti JScript spesso ottenere questo piccolo sbagliato di puzzle. Che cosa significa questo codice JScript stampa?

var Animal = new Object(); 
function Reptile() { } 
Reptile.prototype = Animal; 
var lizard = new Reptile(); 
print(lizard instanceof Reptile); // this is true
print(lizard.constructor == Reptile);  // is this true or false? explain your answer!

Prototype eredità non funziona sempre il modo di pensare lo fa! Per una spiegazione di ciò che questa stampe e perché, vedi mio articolo sul tema .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top