2010-09-03 5 views
2

J'ai quelques questions en regardant le tutoriel this.Comment savoir quand appeler la méthode de base ou remplacer les méthodes dans la collection observable

Je me demande quand j'écris les méthodes, comment puis-je savoir si j'ai besoin d'appeler la méthode de base?

public CustomerCollection(IEnumerable<Customer> customers, OMSEntities context) : base(customers) 

aussi pourquoi dois-je faire

protected override void InsertItem(int index, Customer cust) 
{ 
    this.context.AddToCustomers(cust); 
    base.InsertItem(index, cust); 
} 

protected override void RemoveItem(int index) 
{ 
    this.context.DeleteObject(this[index]); 
    base.RemoveItem(index); 
} 

qu'est-ce que les 2 lignes dans chaque méthode faire? et pourquoi le besoin d'une telle méthode similaire. si je remplace les méthodes pour supprimer et ajouter pourquoi ne pas mettre à jour aussi?

Répondre

4

Vous appelez la méthode de base lorsque vous êtes une méthode est juste une fonctionnalité supplémentaire décrivant ce que fait la méthode de base, vous n'appelez pas la méthode de base lorsque vous remplacez sa fonctionnalité en gros. Et si vous ne savez pas ce que fait la méthode de base, vous ne la surchargerez pas, donc en sachant ce qu'elle fait et pourquoi vous la surchargez, vous devriez être capable de prendre cette décision en accord.

+0

puis à propos de la 2ème question? "Qu'est-ce que les 2 lignes dans chaque méthode font? Et pourquoi le besoin d'une telle méthode similaire. Si je écraser les méthodes pour supprimer et ajouter pourquoi ne pas mettre à jour aussi?" –

+0

@jiewmeng: Probablement parce que this.context a déjà une référence à l'objet, donc les modifications apparaîtront à l'objet this.context, il n'a donc pas besoin d'être ajouté ou supprimé, et donc la classe de base met à jour l'élément est assez. Je ne peux pas dire comme si je savais ce que "ce.contexte" désignait précisément. –

+0

contexte est le "Entity Container Name" de mon modèle de données, je ne sais pas ce qui est trop –

0

Pour la première partie de votre question si vous n'ajoutez pas un :base(parameter) à la fin d'un constructeur, il mettra un :base() à votre disposition dans les coulisses. S'il n'y a pas de base(), vous obtiendrez une exception de compilation. vous avez besoin d'une chaîne de constructeurs jusqu'à object(). ajouter que :base(parameter) est juste une façon de choisir un autre constructeur que celui par défaut.

Pour la deuxième partie. En règle générale, si vous substituez une méthode pour fournir une fonctionnalité supplémentaire, vous devez également appeler la méthode de base (afin que vous obteniez ses fonctionnalités), si vous essayez de remplacer la fonctionnalité au lieu de l'ajouter. vous n'avez pas besoin d'appeler la base (comme vous le remplacez :)).

+0

alors à propos de la 2ème question? "Qu'est-ce que les 2 lignes dans chaque méthode font? Et pourquoi le besoin d'une telle méthode similaire. Si je écraser les méthodes pour supprimer et ajouter pourquoi ne pas mettre à jour aussi?" –

+0

La première ligne est de trouver le contexte de l'objet dans la classe actuelle (cela peut être dans votre classe personnalisée ou dans le parent s'il s'agit d'un élément public ou protégé) et d'appeler AddToCustomers et de lui passer [indice]. Ensuite, après cela, il appellera la version de base de la fonction en passant les mêmes paramètres. Donc, c'est essentiellement comme copier la première ligne et éditer la fonction de base et la coller en haut –

Questions connexes