我正在为我正在编写的web服务创建一个静态助手类。我正在利用Telligent的API,因此创建了这些Telligent“服务”对象,允许我使用该平台进行操作。例如,我在我的助手类中创建了一个MembershipSerice对象,这样我就可以用相同的对象来做成员资格的事情了。在我的helper类中,我有一个带有getter的属性,可以创建这些对象中的一个新对象:
private static MembershipService _MembershipService {
get {
return new MembershipService(path, usr, pwd);
}
}然后我有一个返回该属性的方法:
public MembershipService getMembershipService() {
return _MembershipService;
}这是否意味着因为属性是静态的,所以在getter中创建的新对象只创建一次?此外,在编码风格方面,最好将属性设置为公共的,因此该方法将是不必要的。
或者..。将对象创建为私有变量并通过公共方法返回它是不是更好:
private static MembershipService _mbrSvc = new MembershipService(path, usr, pwd);
public MembershipService getMembershipService() {
return _mbrSvc;
}
// then called elsewhere by me via:
MembershipService svc = MyHelperClass.getMembershipService();如果你对我如何设置它的风格有任何想法,以便它的效率和表现良好,请让我知道。
发布于 2010-01-11 23:48:15
是否意味着因为属性是静态的,所以在getter中创建的新对象只创建一次?
不,因为你有
new MembershipService(path, usr, pwd);在getter内部,无论_MembershipService被声明为static,每次调用时都会创建一个新实例。在这个上下文中,static意味着您可以在没有定义类的实例的情况下调用该方法。
至于评论风格,嗯,这真的取决于你想做什么。您想要单实例吗?如果是,则创建一个静态成员变量_mbrSvc,并从getter返回该变量:
private static MembershipService _mbrSvc = new MembershipService(path, usr, pwd);
private static MembershipService _MembershipService {
get {
return _mbrSvc;
}
}否则,照原样做就好了。
发布于 2010-01-12 00:28:37
为了完整起见,Jason,Mark还取决于MembershipService的定义。如果MembershipService是一个类,那么该对象将在调用方法之间共享。如果MembershipService是一个结构,则始终会创建一个副本。仅仅将其称为成员服务对象并不能说明区别,因为在DotNet中,所有东西都是对象。
如果创建对象的成本很高,可以考虑结合使用单例模式和延迟加载:
private static MembershipService _mbrSvc;
private static MembershipService _MembershipService {
get {
if(_mbrSvc == null)
{
_mbrSvc = new MembershipService(path, usr, pwd);
}
return _mbrSvc;
}
} 发布于 2010-01-11 23:48:38
每次使用new时,都会创建一个新对象。
因此,第一种方法在每次访问属性时创建一个新对象。
你正在寻找的东西被称为单例-你的第二种方法是在C#中实现它的一种可能性。
https://stackoverflow.com/questions/2042857
复制相似问题