Dans Create()
vous créez une classe mais, comme vous le dites, ne pouvez pas nous en dehors de la classe. La première chose que vous devez faire est de changer pour renvoyer l'objet:
public SomeType Create()
{
//code that creates the object here.
//Lets say it gets put into a variable called ret
return ret;
}
public void Use()
{
SomeType st = Create();
//use st here.
}
Sinon, au lieu de la méthode qui utilise l'objet appelant Create
, la méthode qui crée l'objet pourrait passer comme paramètre à Use(SomeType st)
.
Pour ce faire avec plusieurs objets, nous devons retourner non pas un SomeType, mais un objet qui contient ces multiples objets SomeType. Parfois, nous avons besoin de certaines propriétés et méthodes à propos de cette collection entière (par exemple, le nombre, la possibilité de revenir en arrière dans la collection, etc.). Dans ce cas, nous retournerions un tableau, un List<SomeType>
, un HashSet<SomeType>
ou peut-être quelque chose comme Dictionary<string, SomeType>
selon le cas.
Si nous n'avons pas besoin de telles opérations sur l'ensemble de la collection, il est plus simple et plus efficace de renvoyer un IEnumerable<SomeType>
qui est un objet permettant de travailler sur une séquence de tels objets mais pas beaucoup d'autre. C# a une syntaxe précise pour le faire.Disons que nous allons revenir 10 ces objets:
public IEnumerable<SomeType> Create()
{
for(int i = 0; i != 10; ++i)
{
//code that creates the object here.
//Lets say it gets put into a variable called ret
yield return ret;
}
}
public void Use()
{
foreach(SomeType st in Create())
{
//use st here.
}
}
Le mot-clé yield
bien masquer beaucoup de complexité à propos IEnumerable<SomeType>
et vous permet d'écrire tout le code qui passe à chaque nouvel objet (que la complexité est toujours là dans le code produit, mais pas votre problème à vous soucier).
Vous allez devoir développer un peu - parce que je ne vois pas quel est le problème. Si elles doivent être vues par d'autres méthodes dans une classe, c'est une variable de niveau classe, c'est-à-dire une propriété privée. S'ils ont besoin d'être vus par d'autres classes, alors c'est un problème plus complexe mais cela revient à avoir besoin de quelque chose pour une variable globale (une classe statique ou une propriété statique d'une classe) – Murph