Одним из практических примеров применения возвращаемых данных типа объектов служит
// Использовать фабрику класса.
using System;
class MyClass {
int a, b; // закрытые члены класса
// Создать фабрику для класса MyClass. public MyClass Factory(int i, int j) {
MyClass t = new MyClass ;
t.a = i; t.b = j;
return t; // возвратить объект
}
public void Show {
Console.WriteLine("а и b: " + a + " " + b);
}
}
class MakeObjects { static void Main {
MyClass ob = new MyClass ; int i, j;
// Сформировать объекты, используя фабрику класса. for(i=0, j =10; i < 10; i++, j —) {
MyClass anotherOb = ob.Factory(i, j); // создать объект anotherOb.Show;
}
Console.WriteLine ;
}
}
Вот к какому результату приводит выполнение этого кода.
а и Ь: 0 10 а и Ь: 19 а и Ь: 2 8 а и b: 3 7 а и Ь: 4 6 а и Ь: 5 5 а и Ь: 6 4
а и b: 7 3 а и b: 8 2 а и b: 9 1
Рассмотрим данный пример более подробно. В этом примере конструктор для класса МуС lass не определяется, и поэтому доступен только конструктор, вызываемый по умолчанию. Это означает, что значения переменныхаиbнельзя задать с помощью конструктора. Но в фабрике классаFactory можно создать объекты, в которых задаются значения переменныхаи Ь. Более того, переменныеаи b являются закрытыми, и поэтому их значения могут быть заданы только с помощью фабрики классаFactory .
В методеMain получается экземпляр объекта классаМуС lass,а его фабричный метод используется в циклеforдля создания десяти других объектов. Ниже приведена строка кода, в которой создаются эти объекты.
MyClass anotherOb = ob.Factory(i, j); // создать объект
На каждом шаге итерации цикла создается переменная ссылки на объектanotherOb,которой присваивается ссылка на объект, формируемый фабрикой класса. По завершении каждого шага итерации цикла переменнаяanotherObвыходит за пределы области своего действия, а объект, на который она ссылается, утилизируется.
Возврат массива из метода