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