是在静态属性的getter创建了一个新对象只创建一次?
-
19-09-2019 - |
题
我创建web服务我正在写一个静态辅助类。我接进Telligent的API,因此创建这些Telligent“服务”的对象,让我做的事情与平台。例如,我在我的辅助类创建MembershipSerice对象,所以我可以办会员的东西与同一个对象。在我的辅助类我有创建这些对象中的一个新的获取方法的属性:
private static MembershipService _MembershipService {
get {
return new MembershipService(path, usr, pwd);
}
}
然后我有一个返回特性的方法:
public MembershipService getMembershipService() {
return _MembershipService;
}
这是否意味着因为属性是静态的,在吸气创建的新对象只创建一次?此外,在编码风格方面,将它仅仅是更明智的公共财产,因此该方法是不必要的。
或者......这将是更好的只是创建对象的私有变量,并通过公共方法返回它:
private static MembershipService _mbrSvc = new MembershipService(path, usr, pwd);
public MembershipService getMembershipService() {
return _mbrSvc;
}
// then called elsewhere by me via:
MembershipService svc = MyHelperClass.getMembershipService();
如果你对我如何设置此所以其高效的风格有什么想法和表现良好,请让我知道。
解决方案
是否意味着由于属性是静态的是,在吸气创建的新对象只创建一次?
没有,因为你有
new MembershipService(path, usr, pwd);
吸气剂的内部,无论_MembershipService
的所声明static
一个新的实例将在每次调用来创建。所有这一切意味着static
在这种情况下是可以调用该方法,而无需定义类的一个实例。
至于评论风格,嗯,这真的取决于你想要做什么。你想一个实例?如果是这样,创建静态成员变量_mbrSvc
并返回从吸气剂:
private static MembershipService _mbrSvc = new MembershipService(path, usr, pwd);
private static MembershipService _MembershipService {
get {
return _mbrSvc;
}
}
否则,因为它是很好。
其他提示
杰森,马克 只是为了完整性起见,ALS取决于MembershipService的定义。 如果MembershipService是类,则对象被调用方法之间共享。 如果MembershipService是一个结构,始终是创建一个副本。只是称它是MembershipService对象没有指定的差,因为在DOTNET的一切都是对象。
如果目的是创建昂贵,可以考虑使用单例模式,利用迟缓装载结合:
private static MembershipService _mbrSvc;
private static MembershipService _MembershipService {
get {
if(_mbrSvc == null)
{
_mbrSvc = new MembershipService(path, usr, pwd);
}
return _mbrSvc;
}
}
每次您使用的新创建新的对象。
因此,第一种方法创建一个新对象,每次访问该属性。
你所寻找的被称为辛格尔顿 - 你的第二个方法是一种可能性来实现它在C#
。