相关疑难解决方法(0)

C#的单例模式

我需要存储一堆需要全局访问的变量,我想知道单例模式是否适用.从我看过的例子来看,单例模式只是一个无法继承的静态类.但我见过的例子对我的需求来说过于复杂.什么是最简单的单身人士课程?难道我不能只用一些变量制作一个静态的密封类吗?

c# singleton

15
推荐指数
2
解决办法
9568
查看次数

自动属性初始化器Singleton实现

因此,使用全新的C#6,我们获得了那些整洁的自动属性初始化器.我想我也可以利用这些来制作比以往更简洁的单身人士.显然其他人也有这个想法.

public sealed class Singleton
{
    public static Singleton Instance { get; } = new Singleton();
    private Singleton() { /* some initialization code */ }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 它的线程安全性如何?
  2. 它是多么懒惰,或者实际创建实例的时候?(不是优先考虑,但对未来的参考会有好处)
  3. 总体来说这是一个好主意吗?

(它可能看起来与这个问题类似,但事实并非如此)

.net c# singleton automatic-properties c#-6.0

8
推荐指数
1
解决办法
1284
查看次数

使用单例模式时,我的公共类应该返回私有还是公共实例?

我有一个像这样定义的单例:

public partial class MoonDataManager
{

    static MoonDataManager _singletonInstance;
    public static MoonDataManager SingletonInstance
    {
        get
        {
            return _singletonInstance;
        }
        private set
        {
            _singletonInstance = value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有一个安全地创建实例的函数:

   public static async Task<MoonDataManager> CreateSingletonAsync()
    {
            _singletonInstance = new MoonDataManager();
Run Code Online (Sandbox Code Playgroud)

我是不是该:

return  _singletonInstance;  (field) 
Run Code Online (Sandbox Code Playgroud)

要么

return SingletonInstance;  (property)
Run Code Online (Sandbox Code Playgroud)

我关心垃圾收集,特别是在Xamarin的iOS或Android中.

如果在C#中有这样的命名模式,请告诉我是否偏离了标准.


更新:

现在我觉得我真的陷入了线程和异步方法的困境.以下是对象及其目标:

  • MoonDataManager:RegisterTable<Models.IssuerKey>每个表运行一次.这是一种基本上运行的通用方法(new MobileServiceSQLiteStore).DefineTable<T>()

  • OfflineStore:这是一个MobileServiceSQLiteStore.

  • MobileClient:这是一个MobileServiceClient.

  • MoonDataManager依赖关系:MoonDataManager要求OfflineStore和MobileClient完成初始化.具体来说,它执行MobileServiceClient.SyncContext.InitializeAsync(OfflineStore)

我不确定如何理解这种依赖关系的意义...或者如何使代码看起来很好,并且是线程安全的.

这是代码的新迭代:

private readonly Lazy<MobileServiceClient> lazyMobileClient = 
        new Lazy<MobileServiceClient>(() => …
Run Code Online (Sandbox Code Playgroud)

c# garbage-collection xamarin.ios xamarin.android automatic-ref-counting

1
推荐指数
1
解决办法
985
查看次数