这篇文章对我对C#类的理解以及为什么它们比静态函数更有优势.
我想获得一个对象列表.列表中的每个对象代表表中的记录.这在静态函数中很容易做到.
使用课程,我已经能够按如下方式进行:
调用例程:
ListOfBusinesses l = new ListOfBusinesses (); Listb = l.listBusinesses();
课程:
public class Business { public string Bupk { get; set; } public string Bu_name { get; set; } } public class ListOfBusinesses { public ListlistBusinesses() { List businesses = new List (); businesses.Add(new Business("1", "Business Name 1")); businesses.Add(new Business("2", "Business Name 2")); return businesses; } }
我不能重写这个类,这样就可以用一行来完成:
ListOfBusinesses l = new ListOfBusinesses();
在我看来,上面的ListofBusinesses类只不过是一个包含在没有属性的类中的静态函数,只是为了拥有一个类.
我试过了:
public class ListOfBusinesses { Listbusinesses; public List ListOfBusinesses() { List businesses = new List (); businesses.Add(new Business("1", "Business Name 1")); businesses.Add(new Business("2", "Business Name 2")); return businesses; } }
但收到编译器错误"成员名称不能与封闭类型相同".例如,我试图使用构造函数,但我遗漏了一些东西.
在我误解了一段时间的地方,任何帮助都会启发我.
迈克托马斯
我认为你混淆了静态函数,构造函数和工厂方法的概念.
静态功能
定义
这是一种无法访问(并且与之无关)this
类实例的方法.
例
public class BusinessHelper { public static ListListBusinesses() { List businesses = new List (); businesses.Add(new Business("1", "Business Name 1")); businesses.Add(new Business("2", "Business Name 2")); return businesses; } }
用法
使用类名称调用静态方法,而不是类的实例.
Listbusinesses = BusinessHelper.ListBusinesses();
构造函数:这是一个创建this
类实例的方法.它没有返回值,并在实例化对象时调用.
例
public class BusinessList { public ListTheList; public BusinessList() { TheList = new List (); TheList.Add(new Business("1", "Business Name 1")); TheList.Add(new Business("2", "Business Name 2")); } }
用法
创建对象的新实例.
BusinessList myBusinessList = new BusinessList(); businesses = myBusinessList.TheList;
工厂方法
定义
这是一个创建对象实例的方法,以某种方式实例化它,并返回对它的引用.
例
public class BusinessList { public ListTheList; public static BusinessList BusinessListWithTwoCompanies() { BusinessList instance = new BusinessList(); businesses = new List (); 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
领域什么都不会发生.小心变量范围.
您不能拥有与该类同名的成员(字段,属性或方法).这是为构造函数保留的,它没有返回类型(参见上文).这就是您收到编译器错误的原因.
当然.而不是封装List
,扩展它.然后你只需要在构造函数中添加它.
public class ListOfBusinesses : List{ public ListOfBusinesses() : base() { Add(new Business("1", "Business Name 1")); Add(new Business("2", "Business Name 2")); } }
要使用它:
Listl = new ListOfBusinesses();