You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Forms单例模式实现:全局变量共享方案求助

解决Xamarin.Forms全局单例变量的实现问题

嘿,我看你已经找对了方向——单例模式确实是实现Xamarin.Forms全局可调用变量的最优方案,不过你的代码还差几步才能跑起来,我帮你修正并优化一下:

先说说你现有代码的问题

  • Instance()方法没写完:new...后面缺少实例化语句,而且方法没有返回值,外部根本拿不到实例
  • 没有考虑线程安全:如果多个页面同时调用,可能会创建多个Global实例,违背单例的初衷
  • 用方法返回实例不如用属性更符合C#的编码习惯

修正后的完整单例实现

using System;
namespace xamarin_forms
{
    // sealed防止被继承,避免子类破坏单例结构
    sealed class Global
    {
        // 要全局共享的变量,这里用string示例,你可以根据需求加其他类型
        public string Test { get; set; }

        // 静态私有实例字段
        private static Global _instance = null;
        // 线程锁,保证多线程环境下的实例唯一性
        private static readonly object _lockObj = new object();

        // 私有构造函数,禁止外部直接new
        private Global() { }

        // 用静态属性对外提供实例,比方法更直观
        public static Global Instance
        {
            get
            {
                // 双重检查锁定,兼顾性能和线程安全
                if (_instance == null)
                {
                    lock (_lockObj)
                    {
                        if (_instance == null)
                        {
                            _instance = new Global();
                        }
                    }
                }
                return _instance;
            }
        }
    }
}

更简洁的懒加载写法(推荐)

如果你不需要手动控制实例初始化时机,还可以用C#的静态构造器特性,它会自动保证线程安全,代码更简洁:

using System;
namespace xamarin_forms
{
    sealed class Global
    {
        public string Test { get; set; }

        // 静态构造器,CLR会保证它只执行一次,且线程安全
        static Global() { }

        // 直接静态初始化实例
        private static readonly Global _instance = new Global();

        private Global() { }

        public static Global Instance => _instance;
    }
}

如何在任意页面调用

不管用哪种写法,在你的Xamarin.Forms页面里调用都很简单:

// 设置全局变量
Global.Instance.Test = "我是全局共享的内容";

// 获取全局变量
var globalValue = Global.Instance.Test;

这样你就能在任何页面里轻松访问和修改这个全局变量啦~

内容的提问来源于stack exchange,提问作者Marco Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:56:39