dotnet C# 如果在構造函數拋出異常 是否可以拿到對象賦值的變量

如果使用某個變量去獲取某個類型的對象創建,但是在這個類型的構造函數調用時拋出異常,請問此變量是否可以拿到對應的對象

如下面代碼

        private void F1()
        {
            Foo foo = null;
            try
            {
                foo = new Foo();
            }
            catch
            {
                // 忽略
            }
        }

    class Foo
    {
        public Foo()
        {
            throw new Exception("lindexi is doubi");
        }

        ~Foo()
        {
        }
    }

請問在執行完成 F1 函數前,在 F1 函數定義的 foo 變量是什麼,是空,還是 Foo 對象

答案自然是空,原因是在 .NET 運行時的邏輯是先分配對象內存空間,然後再調用對象的構造函數,接着將對象賦值給到 foo 變量

而在進行第二步時就炸了,自然就不會給 foo 變量賦值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章