Я думаю, что вы смешиваете понятия статической функции, конструктора и фабричного метода.
Статическая функция
Определение
Это метод, который не имеет доступа (и не связан с) к экземпляру this
класса.
Пример
public class BusinessHelper
{
public static List<Business> ListBusinesses()
{
List<Business> businesses = new List<Business>();
businesses.Add(new Business("1", "Business Name 1"));
businesses.Add(new Business("2", "Business Name 2"));
return businesses;
}
}
Использование
Вызвать статический метод с именем класса, а не экземпляром класса.
List<Business> businesses = BusinessHelper.ListBusinesses();
Конструктор : Это метод, который создает this
экземпляр класса. Он не имеет возвращаемого значения и вызывается при создании экземпляра объекта.
Пример
public class BusinessList
{
public List<Business> TheList;
public BusinessList()
{
TheList = new List<Business>();
TheList.Add(new Business("1", "Business Name 1"));
TheList.Add(new Business("2", "Business Name 2"));
}
}
Использование
Создать новый экземпляр объекта.
BusinessList myBusinessList = new BusinessList();
businesses = myBusinessList.TheList;
Заводской метод
Определение
Это метод, который создает экземпляр объекта, каким-то образом создает его экземпляр и возвращает ссылку на него.
* * Пример 1 040 * +1041 *
public class BusinessList
{
public List<Business> TheList;
public static BusinessList BusinessListWithTwoCompanies()
{
BusinessList instance = new BusinessList();
businesses = new List<Business>();
businesses.Add(new Business("1", "Business Name 1"));
businesses.Add(new Business("2", "Business Name 2"));
return instance;
}
}
Использование
Вызовите фабричный метод вместо создания нового объекта.
BusinessList myBusinessList = BusinessList.BusinessListWithTwoCompanies();
businesses = myBusinessList.TheList;
Две вещи, на которые следует обратить внимание:
Вы объявляете поле businesses
, но приступаете к созданию другой переменной с именем businesses
в вашем методе ListOfBusinesses()
и возвращаете ее. С полем businesses
ничего не случится. Будьте осторожны с переменной областью видимости.
У вас не может быть члена (поля, свойства или метода) с тем же именем, что и у класса. Это зарезервировано для конструктора, который не имеет возвращаемого типа (см. Выше). Вот почему вы получаете ошибку компилятора.