為什么執行完set方法后.list還是為null
?public partial class Form1 : Form??? {??????? public Form1()??????? {??????????? InitializeComponent();??????? }??????? List list = null;??????? private void button1_Click(object sender, EventArgs e)??????? {??????????? set(list);??????? }??????? private void set(List l)??????? {??????????? l = new List();??????? }??? }
9 回答

幕布斯7119047
TA貢獻1794條經驗 獲得超8個贊
上面的各位都是對的。
稍微補充一下:在C#里,方法的參數有引用傳和值傳兩種。只有加了ref的才是引用傳。值傳時方法內部使用參數的副本,引用傳世使用參數的引用。在你的代碼里,set()方法的參數實際上傳了list 變量的值,即指向null的內存地址(可以這樣理解,實際上是一個包裝過的指針),set()方法內部,l的值是null的內存地址,但l和之前的list是不同的。對l的操作不會影響list,但是由于l和list指向的地址是同一個,對l指向的地址的操作,同樣會對list起作用。
?

蕭十郎
TA貢獻1815條經驗 獲得超13個贊
@彬彬@科比:?
實際上,還有一個out,但是和ref不一樣。帶out的參數可以沒有初值,其他和ref一樣。
對于引用傳和值傳兩個概念,實際上就是看方法接到的參數是對象本身還是對象的副本。
- 9 回答
- 0 關注
- 398 瀏覽
添加回答
舉報
0/150
提交
取消