StackOverflowException當我在程式下面運行時,我得到了。我的疑問是該程式如何在不執行建構式方法的情況下遞回呼叫每個 classes( ArrayTest1, ArrayTest2) 欄位?
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
var arraryTest = new ArrayTest1();
}
}
public class ArrayTest1
{
ArrayTest2 arrayTest2 = new ArrayTest2();
public ArrayTest1()
{
Console.WriteLine($"{nameof(ArrayTest1)} Class Contructor Executed");
}
}
public class ArrayTest2
{
ArrayTest1 arrayTest1 = new ArrayTest1();
public ArrayTest2()
{
Console.WriteLine($"{nameof(ArrayTest2)} Class Contructor Executed");
}
}
uj5u.com熱心網友回復:
因為您創建了一個無限鏈 ArrayTest1 -> ArrayTest2 -> ArrayTest1 -> ArrayTest2 -> ...
要了解為什么沒有得到任何輸出,請參閱C# 建構式執行順序
您的案例中的重要步驟(不涉及繼承):
- 成員變數初始化為默認值
- 變數初始化器被執行
- 建構式體被執行
您永遠不會到達建構式主體,因為堆疊溢位發生在變數初始化程式中
uj5u.com熱心網友回復:
因為當你這樣做時:
new ArrayTest1()
您正在創建ArrayTest1. 這樣做:
ArrayTest2 arrayTest2 = new ArrayTest2();
這將創建一個ArrayTest2. 這樣做:
ArrayTest1 arrayTest1 = new ArrayTest1();
這將創建一個ArrayTest1. 這樣做:
ArrayTest2 arrayTest2 = new ArrayTest2();
這將創建一個ArrayTest2. 這樣做:
ArrayTest1 arrayTest1 = new ArrayTest1();
這將創建一個ArrayTest1...的實體
以此類推,無限期。
目前尚不清楚您對代碼的目標是什么。但很明顯,您的物件不能以這種方式相互依賴,因為創建物件實體的簡單行為會導致無限遞回。
僅給出顯示的代碼,解決方案是簡單地從類中洗掉那些相互依賴的欄位,因為無論如何都沒有使用它們:
public class ArrayTest1
{
public ArrayTest1()
{
Console.WriteLine($"{nameof(ArrayTest1)} Class Contructor Executed");
}
}
public class ArrayTest2
{
public ArrayTest2()
{
Console.WriteLine($"{nameof(ArrayTest2)} Class Contructor Executed");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/525980.html
標籤:C#。网
