静态属性是否可以返回c#中对象/类的新实例
本文关键字:新实例 实例 对象 是否 属性 返回 静态 | 更新日期: 2023-09-27 18:20:01
我正在ASP.NET MVC 4中构建一个应用程序。我正在创建一个类(类似于Factory类型),它将返回我在BAL层中创建的服务类的实例。我想在该类中声明静态属性,它们应该返回请求的服务类的Instance。
我的问题是,静态属性是否有可能返回新类的实例,因为静态属性将被分配一个内存,该内存将保留在整个应用程序中。我在这里有点困惑,请解释发生了什么以及最好的方法是什么
到目前为止完成的代码
public class Factory
{
public static CountryService CountryServiceInstance
{
get
{
return new CountryService(new CountryRepository());
}
}
}
您应该写一个函数来创建新实例,而不是获取属性
public class Factory
{
public static CountryService CreateNewService()
{
return new CountryService(new CountryRepository());
}
}
关于你的记忆问题,请阅读Sriram Sakthvel的第一条评论
有关工厂模式的更多信息,请点击此处:http://msdn.microsoft.com/en-us/library/ee817667.aspx
C#中的属性只是一个返回应该在其主体中返回的内容的方法。在您的情况下,每次访问该属性时,都会创建一个新的服务实例。
如果您只想要该服务的一个实例,您可能希望将其存储到静态私有变量中,如
private static readonly Lazy<CountryRepository> _fact
= new Lazy<CountryRepository>(() => new CountryRepository());
此外,静态属性永远不会"在整个应用程序的内存中"存储一些东西,但程序员可以做到这一点。
同样,属性只是一对set''get方法,除非您使用自动属性,其中还为要存储的值创建了一个后备字段。
static
关键字本身仅指定不能通过this
关键字访问当前类成员,并且其值将在整个appdomain(或您的应用程序)中共享。
每次调用的方法CountryServiceInstance将始终为您提供一个CountryRepository的新实例。
正如您所提到的,大多数Factory类都是静态的,它们负责创建新的对象实例。如果它们给出相同的对象实例,则没有任何工厂模式符合其意图。
毫无疑问,你可以继续犯罪。。
如果您想快速验证,可以检查创建的对象哈希代码对象GetHashCode()它们将是唯一的,因为它们是独立的对象