静态属性是否可以返回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());
        }
    }
}

静态属性是否可以返回c#中对象/类的新实例

您应该写一个函数来创建新实例,而不是获取属性

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()它们将是唯一的,因为它们是独立的对象