我需要存储一堆需要全局访问的变量,我想知道单例模式是否适用.从我看过的例子来看,单例模式只是一个无法继承的静态类.但我见过的例子对我的需求来说过于复杂.什么是最简单的单身人士课程?难道我不能只用一些变量制作一个静态的密封类吗?
因此,使用全新的C#6,我们获得了那些整洁的自动属性初始化器.我想我也可以利用这些来制作比以往更简洁的单身人士.显然其他人也有这个想法.
public sealed class Singleton
{
public static Singleton Instance { get; } = new Singleton();
private Singleton() { /* some initialization code */ }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
(它可能看起来与这个问题类似,但事实并非如此)
我有一个像这样定义的单例:
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