В Create()
вы создаете класс, но, как вы говорите, не можете использовать его вне класса.Первое, что вам нужно сделать, это изменить его так, чтобы он возвращал объект:
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.
}
В качестве альтернативы, вместо метода, который использует объект, вызывающий Create
, метод, который создает объект, может передать его какпараметр для Use(SomeType st)
.
Чтобы сделать это с несколькими объектами, нам нужно вернуть не SomeType, а объект, который содержит эти несколько объектов SomeType.Иногда нам нужны определенные свойства и методы для всей коллекции (например, счетчик, возможность перемещаться вперед и назад по коллекции и т. Д.).В этом случае мы бы вернули массив, List<SomeType>
, HashSet<SomeType>
или, возможно, что-то вроде Dictionary<string, SomeType>
.
Если нам не нужны такие операции над коллекцией в целом, тогда онаПроще и эффективнее вернуть IEnumerable<SomeType>
, который является объектом, который позволяет работать с последовательностью таких объектов, но не намного.C # имеет синтаксис именно для этого.Скажем, мы собираемся вернуть 10 таких объектов:
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.
}
}
Ключевое слово yield
прекрасно скрывает много сложностей, связанных с IEnumerable<SomeType>
, и позволяет вам просто написать код, который пропускает каждый новый объект (которыйв создаваемом коде все еще есть сложность, но не о вашей проблеме, о которой стоит беспокоиться).