C#中只允許產生一個類的執行個體的方法

來源:互聯網
上載者:User

有的時候我們會碰到這樣的情況:在一個表單中,我們點擊一個按鈕產生一個新的表單,如果我們在代碼中不進行限制的話,再點擊一次按鈕,又會產生一個表單,對於每個表單當然是有一個表單的執行個體和它對應,如果我想在程式中只允許產生一個類的執行個體該怎麼辦呢?其實實現上面不能再產生一個新的表單還是比較簡單的實現的,可以在產生了表單以後我們設定按鈕屬性為不可用:Button1.Enable=false;

但是,我在這裡想實現的是不用讓按鈕不可用,來完成程式只能產生一個類的執行個體的方法:

方法一:

如果一個類你只想一個執行個體對其進行操作,那麼我們可以將類中的域,屬性以及函數都定義為static的,而且我們把建構函式定義成private的,這樣只有類名才能對類裡面的域,屬性還有方法進行訪問了,而且該類也不能在類外建立一個執行個體了。

public class Class2 

{

           private Class2(){} 

           public static Type VariableName; 

           public static Type FunctionName(){} 


這中方法不適合於WINFORM程式中的表單類。

方法二: 

設定一個bool型的變數來表識是否已經建立了一個執行個體。

public class Class2

    {

        private Class2()

        {

        }

        private static bool instance_flag=false;

        public static Class2 GetInstance()

        {

            if(!instance_flag)

            {

                Class2 c2=new Class2();

                instance_flag=true;

                return c2;

            }

            else

            {

                Console.WriteLine("you have already create a instance");

                return null;

            }


        }

    }

如果已經建立了一個執行個體,那麼instance_flag=true,這樣程式就知道已經有一個執行個體已經建立,將不會建立新的執行個體。

方法三:

在Class2中建立一個類的執行個體,該執行個體是static的,然後在類外面直接用這個執行個體進行賦值,也可通過函數來返回這個類的執行個體。但是這樣的話,就會在編譯的時候就會產生這個類的執行個體,它會浪費資源,效率也不高,可以在需要用到執行個體的時候才產生,代碼如下:

    public class Class2

    {

        private Class2()

        {

        }

        private static Class2 c2=null;

        public static Class2 GetInstance()

        {

            if(c2==null)

            {

                c2=new Class2();

            }

            return c2;

        }

    }


static方法只能訪問static的域。根據以上代碼,在需要使用執行個體的時候,可以用類名來調用GetInstance()方法。來返回一個執行個體。

以上方法不能使用建構函式,因為都將建構函式設定成了private的,目的也是這樣,禁止多次產生執行個體。新手感想,有問題請幫忙指出,謝謝!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.