iT邦幫忙

0

Singleton class 如何取得另一個 Singleton class 的資料

  • 分享至 

  • xImage

C#, 假設有二個class都是Singleton, class A 和 class B
class A 無法取得 class B 的 Instance. 反之也是. 是這樣子嗎?
如果是, 請問, 有什麼辦法可以解決嗎?

當然不是喔,有方法可以。基本的就是在建構器(constructor)時傳入Singleton類型變數或以一個public 或 internal 的變數來存放Singlteotn實例……。想下方已有慈悲的菩薩回答了。若不成,再來問我吧。感恩感恩 南無阿彌陀佛
我的TextForCtext方案就有用到類似的原理。感恩感恩 南無阿彌陀佛
https://github.com/oscarsun72/TextForCtext
froce iT邦大師 1 級 ‧ 2023-03-03 10:46:01 檢舉
C# 我不熟,但 Singleton 只是確保整個process只會有一個唯一的instance而以。
你要存取另外一個 Singleton instance 就跟一般instance存取另一個一樣吧...

我比較好奇你怎麼會有這種想法。
player iT邦大師 1 級 ‧ 2023-03-03 13:05:10 檢舉
https://zh.wikipedia.org/wiki/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2023-03-03 08:05:28
最佳解答
using System;

namespace SingletonExample
{
    class Program
    {
        static void Main(string[] args)
        {
                // 創建SingletonA對象
                SingletonA a = SingletonA.GetInstance();
                // 在SingletonA中設置數據
                a.Name = "John Doe";
                a.Age = 30;

                // 創建SingletonB對象
                SingletonB b = SingletonB.GetInstance();

                // 訪問SingletonA並獲取數據
                string name = b.GetName();
                int age = b.GetAge();

                // 在控制台上輸出數據
                Console.WriteLine("Name: " + name);
                Console.WriteLine("Age: " + age);

                Console.ReadLine();
        }
    }
    // SingletonA類
    class SingletonA
    {
        // 宣告SingletonA類別的靜態成員變數instance,初始值為null
        private static SingletonA instance = null;

        // 宣告Name和Age屬性,並可透過Get和Set方法來取得和設定值
        public string Name { get; set; }
        public int Age { get; set; }

        // 將建構子設為private,防止外部直接建立實例
        private SingletonA()
        {
        }

        // GetInstance方法:透過此方法來取得SingletonA的實例
        public static SingletonA GetInstance()
        {
            // 如果instance為null,表示還未創建SingletonA實例,則創建一個新的實例
            if (instance == null)
            {
                instance = new SingletonA();
            }
            return instance;
        }
    }
    // SingletonB類
    class SingletonB
    {
        // 宣告SingletonB類別的靜態成員變數instance,初始值為null
        private static SingletonB instance = null;

        // 將建構子設為private,防止外部直接建立實例
        private SingletonB()
        {
        }

        // GetInstance方法:透過此方法來取得SingletonB的實例
        public static SingletonB GetInstance()
        {
            // 如果instance為null,表示還未創建SingletonB實例,則創建一個新的實例
            if (instance == null)
            {
                instance = new SingletonB();
            }
            return instance;
        }

        // GetName方法:從SingletonA獲取Name數據
        public string GetName()
        {
            return SingletonA.GetInstance().Name;
        }

        // GetAge方法:從SingletonA獲取Age數據
        public int GetAge()
        {
            return SingletonA.GetInstance().Age;
        }
    }
}
0
科科
iT邦好手 8 級 ‧ 2023-03-03 09:18:04

用net core的話,以下供參考:

    public class SingletonA 
    {
        private readonly IServiceProvider _serviceProvider;

        public SingletonA(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }

        public void Test()
        {
            _serviceProvider.GetRequiredService<SingletonB>();
        }
    }

我要發表回答

立即登入回答