增加網址:
文章備註、標題(會記錄下來,但是暫時不會顯示):
[綜合]無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:09:13.131 No.21829604
回覆: >>21831153
評分:-1, 年:-1, 月:-1, 週:-1, 日:-1, [+1 / -1] 最後更新:2021-03-11 17:32:02
附圖
島民 C#救我

List<int> Data

我想在別的CLASS上直接用和修改DATA
如果我用下面這class, 這_listNumber的位置是跟DATA的位置一樣嗎? 所以我怎樣改都是在改DATA吧?
[code]
public class ChangeData
{
private List<int> _listNumber;
public ChangeData(List<int> listNumber)
{
_listNumber = listNumber;
}
}
[/code]
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:11:48.999 No.21829639
回覆: >>21830179
[aa]
public class ChangeData
{
private List<int> _listNumber;
public ChangeData(List<int> listNumber)
{
_listNumber = listNumber;
}
}
[/aa]
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:12:39.351 No.21829647
附圖
哈!
無題 無名 ID:s1PPB4d. 2021/03/11(四) 15:15:08.596 No.21829673
回覆: >>21829725
自己的作業自己做

再吵就 sudo rm -rf /
無題 無名 ID:EVt6qJNc 2021/03/11(四) 15:16:33.631 No.21829687
用ref就可以了

public ChangeData(ref List<int> listNumber)
{
_listNumber = listNumber;
}
}
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:19:22.912 No.21829709
>>21829687
不用可以嗎
我測試時 沒用 但成功了
但怕會有不知道的BUG存在
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:20:59.911 No.21829725
附圖
>>21829673
不是作業啦
是在寫客戶的東西
有BUG突然爆了就慘了
無題 無名 ID:VajPD5JY 2021/03/11(四) 15:23:23.419 No.21829743
>>21829725
截圖po上來看看
無題 無名 ID:1EGFaBXc 2021/03/11(四) 15:25:05.454 No.21829763
回覆: >>21829796
附圖
>>21829687
List<T>就已經是參考型別了你還Ref

>>21829725
去吧參考型別(reference-types)和實質型別(value-types)弄清楚吧
這是基本中的基本
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:28:28.361 No.21829796
附圖
>>21829763
書都只寫參考型 參考型的
都不說得再清楚點 參考型是到底有什麼影響

所以上面的
_listNumber = listNumber;
實際上是_listNumber 把位置 指定與listNumber位置一樣 是嗎
所以改_listNumber的內容跟改listNumber的內容是一樣的
無題 無名 ID:PLWnCws2 2021/03/11(四) 15:29:39.652 No.21829806
回覆: >>21830176
>>21829796
>_listNumber的內容跟改listNumber的內容是一樣的
無題 無名 ID:1EGFaBXc 2021/03/11(四) 15:35:23.913 No.21829863
回覆: >>21830016
附圖
>>21829796
我只能說軟軟在網站上都列給你看了,裡面也有說明
----
C# 中有兩種類型:參考類型和實值類型。 參考類型的變數會儲存期資料 (物件) 的參考,而實值類型的變數則會直接包含其資料。 使用參考類型時,這兩種變數可以參考相同的物件,因此對其中一個變數進行的作業可能會影響另一個變數所參考的物件。
----

所以才會有另一個課題出現
叫做deep clone
就是不想動到原物件
無題 無名 ID:S/Grmask 2021/03/11(四) 15:46:07.759 No.21829973
回覆: >>21830036
附圖
List 是一個object
所以你需要用new List<int>() 去創建一個List Object
List<int> Data 是一個object reference
實際上只是保存指向那一個List Object罷了

_listNumber = listNumber 是把那個reference改掉
實際上新的list object 和舊的list object也沒有變化
如果有把這個reference傳出去的話
那邊還是會指著舊的object
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:50:25.114 No.21830016
回覆: >>21830045
>>21829863
書中也是一樣的
"C# 中有兩種類型:參考類型和實值類型。 參考類型的變數會儲存期資料 (物件) 的參考,而實值類型的變數則會直接包含其資料。 使用參考類型時,這兩種變數可以參考相同的物件,因此對其中一個變數進行的作業可能會影響另一個變數所參考的物件。
"

>>儲存期資料 (物件) 的參考
所以"參考"是3小卻沒看懂
然後同一個詞一直說一直說

如果他能轉換一下解說方式
直接說 "參考" 就是物品的存在位置 的話
可能才會懂

不然問什麼是右燒
然後島民解說 右燒就是島上的右燒
右燒會常常在K島出現
所以右燒可以是右燒
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:51:55.097 No.21830036
附圖
>>21829973
謝島民

怎樣傳出去?
無題 無名 ID:1EGFaBXc 2021/03/11(四) 15:53:05.736 No.21830045
回覆: >>21830147
>>21830016
阿土仔就把它叫做reference,你去怪阿土仔吧
無題 無名 ID:KXg1im2o 2021/03/11(四) 15:55:24.800 No.21830074
回覆: >>21830124
>>21829796
原PO寫的案子是什麼軟體做什麼用的啊?
在商用上,處理資料都直接用DB(SQL SERVER等)吧?
以前學生時代我也寫過一些EDA的軟體,我只想到EDA的工具會用到這個 = =
無題 無名 ID:KXg1im2o 2021/03/11(四) 15:58:38.402 No.21830108
>>21830036
你不會是收費在幫大學或研所資工系的學生寫作業吧?= =
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 15:59:45.418 No.21830124
附圖
>>21830074
在幫機器寫控制系統
以前用跑C 現在廠商把IDE改用C#了
無題 無名 ID:KXg1im2o 2021/03/11(四) 15:59:55.169 No.21830125
>>21830036
Data Structure的作業喔?= =
無題 無名 ID:KXg1im2o 2021/03/11(四) 16:00:31.899 No.21830130
>>21830124
原來如此
無題 無名 ID:KXg1im2o 2021/03/11(四) 16:01:19.855 No.21830138
回覆: >>21830157
>>21830124
老實說,就你的問題來說,你寫出來直接餵資料試下去不就知道了嗎?= =
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:02:37.643 No.21830147
附圖
>>21830045
該死的印度BUG阿土仔
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:04:03.034 No.21830157
回覆: >>21830323
附圖
>>21830138
我是試過能跑
才在島上問
因為我擔心跑是能跑
但之後有些因為觀念不正確而出現的bug
累積出來最後卡死
整台機械當掉
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:05:41.109 No.21830176
附圖
>>21829806
謝島民

我還有很多哈兔圖
要多久才能用完
無題 無名 ID:mLp2z2/2 2021/03/11(四) 16:05:52.920 No.21830179
>>21829639
這段寫成C++會變成
[aa] class ChangeData
{
private:
List<int> *_listNumber;
public:
ChangeData(List<int> *listNumber)
{
_listNumber = listNumber;
}
}
[/aa]
如果你以前寫C,你應該要看得懂這是什麼意思
如果你看不懂,你應該去喝巴拉刈
無題 無名 ID:S/Grmask 2021/03/11(四) 16:11:32.113 No.21830237
附圖
c#的reference 就是c++ 的pointer簡化後再加上garbage collection後生出來的東西
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:13:34.697 No.21830265
回覆: >>21830302
>>21830179
是不是把他的位置傳進去
再讓_listNumber存這位置
所以每次弄_listNumber 時
實際就是在弄listNumber
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:15:12.425 No.21830289
附圖
>>21830237
>>21830179
好島民
哈!
無題 無名 ID:mLp2z2/2 2021/03/11(四) 16:16:41.460 No.21830302
>>21830265

條件是你的listNumber不可以換位子
無題 無名 ID:S/Grmask 2021/03/11(四) 16:16:49.914 No.21830303
附圖
>>21830237
public void ChangeData(List<int> listNumber)
實際上就是這樣子
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:18:05.193 No.21830321
附圖
>>21830237
島民
如果在用完這object
不需要了
把_listNumber=null後
要跑GC.Collect();嗎
還是他自動會收垃圾?
無題 無名 ID:KXg1im2o 2021/03/11(四) 16:18:16.237 No.21830323
回覆: >>21830396
>>21830157
如果試過能跑出「正確的結果」,那就沒什麼好擔心的
問題只在你「試」的過程,有沒有周詳,餵的資料
有沒有儘可能包含了所有可能的狀況
無題 無名 ID:xABmIXgo 2021/03/11(四) 16:20:24.171 No.21830345
回覆: >>21830358
你他媽的沒有寫程式這方面的天分
認命一點一輩子都去幹苦力活吧
可以去搬磚也可以去擦油漆
滾~
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:20:29.725 No.21830346
附圖
>>21830303
等等
有點看不懂了
就是我擔心的那個

所以實際是 弄出了兩份List<int> ?
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:21:55.441 No.21830358
回覆: >>21830376
附圖
>>21830345
程式天份重點是邏輯

現在問題是定義不清不楚
哈!
無題 無名 ID:esg00iQg 2021/03/11(四) 16:22:27.184 No.21830363
>>21830321
除非你宣告全域變數
不然脫離scope就回收了
無題 無名 ID:1EGFaBXc 2021/03/11(四) 16:24:09.381 No.21830376
>>21830358
沒有不清不楚好嗎
我剛才圖不就給你看了
無題 無名 ID:S/Grmask 2021/03/11(四) 16:25:24.144 No.21830388
回覆: >>21830486
>>21830321
GC會自動跑
可是你也可以手動跑GC.Collect在合適的時機提前跑

你會Pointer的話你應該也會知道
如果你曾經把_listNumber傳到其他地方去的話
就算你用Changelist把_listNumber的reference改掉
在外邊那個Reference還是會指向舊的_listNumber
比較好的做法是list只在class內用
傳到外邊都用IEnumerable

public class ChangeData
{
private List<int> _listNumber;

public IEnumerable<int> ListNumber => _listNumber;

public ChangeData(IEnumerable<int> listNumber)
{
_listNumber = listNumber.ToList(); //<===這邊會開一個新的List object
}
}
無題 無名 ID:5w9avgWM 2021/03/11(四) 16:25:37.604 No.21830391
回覆: >>21830477
C#物件都是參考
沒有實體的
跟Java一樣的思維

之所以會有這種奇怪的設計是因為牠們的思維是這樣的
1.禁止你使用指標,這樣你就不用管理記憶體了
2.發現copy物件的成本太高,但又不想給你用指標,於是物件都天生要用new的,new出來的只能是"參考"
3.最近牠們又發現GC管不到的資源很多,於是增加using搭配Dispose這種用法

說穿了這種語言就是為了不會寫C++的人做出來的
如果所有工程師都能正確使用C++的話就不需要這種語法了
但是這個太難
人難免會犯錯
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:26:06.838 No.21830396
附圖
>>21830323
我擔心的是
所有其他相關機器都會掛在
listNumber 這個list object上
實際項目中
不是List<int> Data 而是 List<device> Data
我是用List<int> Data來跑測試
我怕如果是多弄一份把弄錯了些什麼
之前跟List<device> Data有關聯的東西 全出問題

如果只有一個object 而且一直是在改同一object
那就不用擔心了
無題 無名 ID:PLWnCws2 2021/03/11(四) 16:27:32.029 No.21830412
回覆: >>21830428
>>21830346
>弄出了兩份List<int> ?
不會 List是按reference傳遞的
除了不可變的string之外不需要擔心這個問題
無題 無名 ID:yGqYZ0g2 2021/03/11(四) 16:29:02.194 No.21830426
不求問
無題 無名 ID:S/Grmask 2021/03/11(四) 16:29:04.693 No.21830428
回覆: >>21830522
>>21830412
他把整個List當parameter用想要覆蓋上去
這樣是會弄出了兩份List<int>的
無題 無名 ID:mLp2z2/2 2021/03/11(四) 16:32:13.595 No.21830461
>>21830396
你可以宣告一個List<Test>
然後在Test()跟~Test()裡面都放一行輸出
執行看看Test到底被改了幾次

如果是C++這種信任使用者的語言
你還可以印出Test::this看看他被擺在哪裡
然後在ChangeData裡面也偶爾印一下他追蹤的Test是在哪個位置
讓你更清楚整個程式有沒有照你預期在走
但可惜你用的不是C++,你用的是把使用者當智障處處防範的java的山寨品
所以你大概沒辦法印出指標
太苦了
無題 無名 ID:KXg1im2o 2021/03/11(四) 16:32:13.975 No.21830462
>>21830396
老實說,我覺得不論你的程式觀念有沒有了解透徹
你在進行「測試」時
還是必須要進行「完整的測試」
也就是說,就算你完全理解也寫出了「位置與資料」你認為
是正確的程式
你還是必須進行餵資料進行「位置與資料這塊有沒有搞錯」的測試
好幾年的工作經驗,給你做參考
無題 無名 ID:1EGFaBXc 2021/03/11(四) 16:33:47.887 No.21830477
回覆: >>21830553
>>21830391
"說穿了這種語言就是為了不會寫C++的人做出來的"
這個說法不能說你錯
但我很久很久以前在看組合語言<->C/C++的爭論中
也看過一模一樣的對立面

後來
ORM跟SqlCommand之爭也是一樣的對立面
Jquery與原生JS也是一樣的對立面
雙向綁定(Angular,reactjs..)與Jquery也是一樣的對立面
所以爭這個沒有啥意義,時代和需求的演變罷了
無題 無名 ID:2unWTy3g 2021/03/11(四) 16:34:20.904 No.21830484
>>21830346
對於一串資料來說 你那個"=" 就是把資料位置跟其它人講而已,所以還是一份
如果你底線那個已經有添加資料,那份會被GC回收
(我寫純C的)
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:34:28.491 No.21830486
附圖
>>21830388
努力的
但看不懂
因為我還沒學過IEnumerable
自學是看https://codewithmosh.com/ 學的
無題 無名 ID:PLWnCws2 2021/03/11(四) 16:37:27.083 No.21830522
>>21830428
List<int>本身就是reference type的 不需要顯式的指定ref
你被C++的pointer思維影響了
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types
無題 無名 ID:U7Qli1lo 2021/03/11(四) 16:38:45.239 No.21830534
>>21830396
那你寫一個假class喂進去就模擬一下好了
無題 無名 ID:FJ/PUVJc 2021/03/11(四) 16:39:06.619 No.21830539
附圖
會怕就用迴圈一個一個塞進去啊
都用C#了想必不是什麼追求效率的程式
快速開發的意思就是要你在時間內拉出一坨屎給業務出去賣
不是要你在時間內掌握所有軟硬體的奇技淫巧把程式打造成藝術品

所以不用去思考太低階的東西迫害自己的腦細胞
GC的語言就是自己爽就好 剩下的交給GC幫你把屎把尿
無題 無名 ID:5w9avgWM 2021/03/11(四) 16:40:39.757 No.21830553
回覆: >>21831030
>>21830477
站在老闆的立場
一個處處防呆的語言會比較容易寫、開發比較快
也就意味著可以開比較低的薪資來請工程師
同時也比較能輕易開除員工
不怕被工程師技術綁架
一切都跟成本有關
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:41:47.079 No.21830565
附圖
>>21830539
為什麼我看你說的
我一直在笑WWWW
幸好旁邊沒人
不然以為我寫CODE寫到瘋了
無題 無名 ID:S/Grmask 2021/03/11(四) 16:41:48.049 No.21830566
回覆: >>21830668
>>21830303
>>21830346
沒事
我把你的Constructor看成Method了
無題 無名 ID:5w9avgWM 2021/03/11(四) 16:42:50.332 No.21830584
>>21830539
正確的C#觀念
追求品質就不會考慮C#了
無題 無名 ID:mLp2z2/2 2021/03/11(四) 16:49:19.939 No.21830668
回覆: >>21830752
>>21830566
不管是Constructor還是Method都不會複製List吧
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:53:37.718 No.21830722
附圖
謝謝島民
我愛你們
給你們襪子
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 16:54:08.076 No.21830727
附圖
無本文
無題 無名 ID:S/Grmask 2021/03/11(四) 16:56:09.901 No.21830752
>>21830668
Method的話你實際使用你會先new List<>()再傳去當Parameter啊
把自己傳進去也沒有意義的
無題 無名 ID:0HlMFQ9c 2021/03/11(四) 17:07:43.855 No.21830892
>>21830752
所以METHOD的話 _listNumber要先NEW才能用
形成是兩份的意思嗎?

而Constructor _listNumber不用new
能直接拿去存listNumber的位置
這樣?
無題 無名 ID:mLp2z2/2 2021/03/11(四) 17:15:01.936 No.21830976
回覆: >>21831056
>>21830752
我覺得你沒搞懂C#
無題 無名 ID:NP.ByDNw 2021/03/11(四) 17:19:04.542 No.21831021
回覆: >>21834444
附圖
真的不用討論太深啦
今天程式要求Real-time?
今天程式是跑在嵌入式系統?
都不是? 那你管那麼多幹嘛
你會在意scanf()實際上怎麼呼叫嗎?
你會在意JVM是怎麼實作GC嗎?
一定不會嘛 這種事情好麻煩喔干我屁事
給那些寫C/C++的精障效率廚搞就好了啊

不懂就直接土炮精神硬幹到底
說實話你主管跟老闆也沒那種閒情逸致去看你到底寫了什麼狗屎出來
說不定還會反過來把你負責的部分加速多少%當成績效咧
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 17:19:50.994 No.21831030
>>21830553
會拿這種類似注音學一般基礎的東西來說嘴的也只剩下c++廚了
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 17:21:31.412 No.21831056
回覆: >>21831181
>>21830976
當你把reference跟指標一起談時就出局了
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 17:27:53.221 No.21831153
>>21829604
然後你的問題其實超單純,就是你看不懂語法,不是機器那種,是表述的方式

就只是list紀錄在當前的obj上
後續處理時就是那個list

習慣上我們會設定成readonly,加強表述,也避免有c++轉來的天才亂搞
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 17:29:54.857 No.21831179
>>21831153


也因為是同一個list,因此對內部的操作都是戶通的

好,解釋丸了

狗屁指標
無題 無名 ID:NP.ByDNw 2021/03/11(四) 17:30:07.024 No.21831181
>>21831056
reference就是指標
不管你給他多少新潮的稱號 它就是指標
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 17:34:04.839 No.21831236
回覆: >>21831320
>>21831181
除非你開啟unsafe不然你看不到摸不到這東西

幹麻用虛無飄渺的東西解釋?

然後指標是位置,你要說背後原理就算了,但兩者不是相同的
無題 無名 ID:5w9avgWM 2021/03/11(四) 17:41:46.768 No.21831306
>>21831181
不一樣
有致命性的差異
會這麼講話就證明你有多外行
簡單講一點就好
指標可以像個數字一樣做加減運算
可以跳去修改你想要亂搞的記憶體區塊
參考不能這麼做
無題 無名 ID:NP.ByDNw 2021/03/11(四) 17:42:38.746 No.21831320
回覆: >>21831382
>>21831236
>幹麻用虛無飄渺的東西解釋?
因為正常人一定寫過linked list
你不用指標解釋難道要用更複雜的概念去說明它的用處嗎
除非C#是微軟裡面的天才從0開始用組語實現編譯器
不然一定可以用最基本的C去解釋
如果你怕別人會C#但不會C的話
那我覺得跟他解釋reference還不如直接唬爛他說跟賦值一樣
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 17:47:31.748 No.21831382
回覆: >>21831833
>>21831320
不一定也不是必要,你這樣的方式只是在欺負初學者,其他的話,我不想嗆丸,就不縮惹
無題 無名 ID:NP.ByDNw 2021/03/11(四) 17:49:13.219 No.21831401
>>21831306
說穿了不就比較不自由的指標
貼個新標籤就當新技術了喔
你還真好騙欸
那smart pointer會不會也被你當成新技術啊
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 17:53:48.064 No.21831449
>>21831401
該停了,習慣來說,只要稱呼的方式不同最好兜當兩個東西看比較好

可能有實作方式的不同,或是技術依賴不同,有時更可能背後基礎概念的不同,當新東西重新檢查一次或比較妥善。

除非文件有明說只是單純換名稱,但基本上不會有這種事
無題 無名 ID:mLp2z2/2 2021/03/11(四) 17:55:48.166 No.21831471
回覆: >>21831593
>>21831306
int *是指標
int const *不是指標,有致命性的差異、混在一起講就證明你有多外行
無題 無名 ID:5w9avgWM 2021/03/11(四) 18:05:34.988 No.21831593
>>21831401
可以這麼說
"參考"就是閹割過權限的"指標"
閹過就是不一樣
你閹掉雞雞也會跟"男人"不一樣

>>21831471
你想說的是這個吧wwwww
int *const
基本語法耶wwww
無題 無名 ID:NP.ByDNw 2021/03/11(四) 18:29:50.975 No.21831833
回覆: >>21832098
>>21831382
也沒欺負啊
不懂的東西就是用最簡單的東西去解釋就好
大一一定學過C也學過指標
直接跟他講就是指標讓他明白就好 想白目去把C/C++那套概念拿來亂搞編譯器也會教訓他
不然寫JAVA跟C#的人那麼多你去問他們想像中的GC是怎麼運作
絕對不脫離程式幫你自動delete/free
如果有人回答GC是把記憶體標記回收->壓縮資料->把活很久的資料複製到另一區
那他大概是負責開發JVM的
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 19:00:06.235 No.21832098
回覆: >>21832128
>>21831833
也許人家沒學過,如果是直接學c#的人就壓根不會學linked list
無題 無名 ID:Ce1hTuUI 2021/03/11(四) 19:02:52.660 No.21832128
>>21832098
再者,這種方式就如同用小無相功學其他門派上乘武功,時間長會自爆兜
無題 無名 ID:9jDd1Tsg 2021/03/11(四) 22:10:23.891 No.21834444
>>21831021
我這是Real-time的實時系統阿
無題 無名 ID:9jDd1Tsg 2021/03/11(四) 22:16:02.454 No.21834508
附圖
>>21831153
看不懂你的解釋
所以是那個LIST記在那個上?

能不能用初學者也能懂的語句?