我创建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#

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top