En fait, je n'ai aucune idée de comment cela s'appelle en C#. Mais je veux ajouter la fonctionnalité à ma classe pour ajouter plusieurs éléments en même temps.
myObj.AddItem(mItem).AddItem(mItem2).AddItem(mItem3);
En fait, je n'ai aucune idée de comment cela s'appelle en C#. Mais je veux ajouter la fonctionnalité à ma classe pour ajouter plusieurs éléments en même temps.
myObj.AddItem(mItem).AddItem(mItem2).AddItem(mItem3);
La technique que vous mentionnez est appelée méthodes chaînables. Elle est couramment utilisée lors de la création de DSLs ou de interfaces fluides en C#.
Le modèle typique consiste à faire en sorte que la méthode AddItem() renvoie une instance de la classe (ou de l'interface) dont elle fait partie. Cela permet d'enchaîner les appels ultérieurs à cette méthode.
public MyCollection AddItem( MyItem item )
{
// internal logic...
return this;
}
Certaines alternatives au chaînage de méthodes, pour ajouter des éléments à une collection, incluent :
Utilisation de la params
pour permettre à plusieurs éléments d'être transmis à votre méthode sous forme de tableau. Utile lorsque vous souhaitez masquer la création du tableau et fournir une syntaxe d'argument variable à vos méthodes :
public void AddItems( params MyItem[] items )
{
foreach( var item in items )
m_innerCollection.Add( item );
}
// can be called with any number of arguments...
coll.AddItems( first, second, third );
coll.AddItems( first, second, third, fourth, fifth );
Fournir une surcharge du type IEnumerable ou IEnumerable afin que plusieurs éléments puissent être transmis ensemble à votre classe de collection.
public void AddItems( IEnumerable<MyClass> items )
{
foreach( var item in items )
m_innerCollection.Add( item );
}
Utilisez la syntaxe de l'initialisateur de collection de .NET 3.5. Votre classe doit fournir un seul paramètre Add( item )
doivent implémenter IEnumerable, et doivent avoir un constructeur par défaut (ou vous devez appeler un constructeur spécifique dans la déclaration d'initialisation). Vous pouvez alors écrire :
var myColl = new MyCollection { first, second, third, ... };
Utilisez cette astuce :
public class MyClass
{
private List<MyItem> _Items = new List<MyItem> ();
public MyClass AddItem (MyItem item)
{
// Add the object
if (item != null)
_Items.Add (item)
return this;
}
}
Elle renvoie l'instance courante, ce qui vous permettra d'enchaîner les appels de méthodes (et donc d'ajouter plusieurs objets "en même temps").
D'autres ont répondu en termes de chaînage direct de méthodes, mais si vous utilisez C# 3.0, vous pourriez être intéressé par les éléments suivants initialisateurs de collection ... ils ne sont disponibles que lorsque vous faites un appel au constructeur, et seulement si votre type a les caractéristiques appropriées. Add
et met en œuvre des méthodes IEnumerable
mais vous pouvez le faire :
MyClass myClass = new MyClass { item1, item2, item3 };
Pourquoi n'utilisez-vous pas le params
mot-clé ?
public void AddItem (params MyClass[] object)
{
// Add the multiple items
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
stackoverflow.com/a/2055701/5558126 Donne un bon exemple de mise en œuvre