亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過將不同的參數傳遞給構造函數來允許實例化不同的單例類

如何通過將不同的參數傳遞給構造函數來允許實例化不同的單例類

C#
catspeake 2021-07-14 13:10:02
我的項目中有一個類,我只想通過構造函數傳遞特定參數來實例化它一次,但是當我傳遞不同的參數時,它應該實例化一個新的參數。我如何使用單例設計模式實現這一目標?或者,如果單例無法實現,您能否建議另一種設計模式?class Program{static void Main(){    SiteStructure s = SiteStructure.Instance;}}public sealed class SiteStructure{static readonly SiteStructure _instance = new SiteStructure();public static SiteStructure Instance{    get    {        return _instance;    }}SiteStructure(){    // Initialize.}}
查看完整描述

2 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

您必須修改_instance變量的初始化方式,使用接受您想要傳入的參數值的函數。此外,_instance變量不能再readonly像它需要在新函數內部初始化一樣。


[TestMethod]

public void CreateSingletonInstance()

{

    SiteStructure s = SiteStructure.GetInstance("Abc123");

    Debug.Print(s.Parameter); // outputs Abc123


    SiteStructure s2 = SiteStructure.GetInstance("Is it really a singleton?");

    Debug.Print(s2.Parameter); // outputs Is it really a singleton?


    SiteStructure s3 = SiteStructure.GetInstance("Abc123");

    Debug.Print(s3.Parameter); // outputs Abc123


    Assert.AreNotEqual(s, s2); // Check to make sure they are different instances

    Assert.AreEqual(s, s3); // Check to make sure they are the same instance

}


public sealed class SiteStructure

{

    static Dictionary<string, SiteStructure> _siteStructures = new Dictionary<string, SiteStructure>();

    static object _instance_Lock = new object();

    public static SiteStructure GetInstance(string parameter)

    {

        if (!_siteStructures.ContainsKey(parameter))

        {

            lock (_instance_Lock)

            {

                if (!_siteStructures.ContainsKey(parameter))

                {

                    _siteStructures.Add(parameter, new SiteStructure(parameter));

                }

            }

        }


        return _siteStructures[parameter];

    }


    private SiteStructure(string parameter)

    {

        // Initialize.

        Parameter = parameter;

    }


    public string Parameter { get; set; }

}


查看完整回答
反對 回復 2021-07-18
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text.RegularExpressions;


namespace Rextester

{

    public class Program

    {

        public static void Main(string[] args)

        {

            var g = SiteStructure.Instance(4);

        }

    }




    public sealed class SiteStructure { 

 public static SiteStructure Instance() 

 { return new SiteStructure();

 }

        public static SiteStructure Instance (int x)

        { return new SiteStructure (x);

        }


 SiteStructure() { }

SiteStructure(int x) { Console.WriteLine("Hello"); }



}


}


查看完整回答
反對 回復 2021-07-18
  • 2 回答
  • 0 關注
  • 275 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號