Коллекциялардағы құрылымдар

Мен сілтемелерді топтаманың көптеген құрылымдарына сақтауды қалаймын. Жалпы орман құрылысы келесідей:

Structure myStructType
  Dim prop1 as String
  Dim prop2 as int
End Structure


Dim myList as new List(Of myStructType)()

'Wrongness below
Dim myStruct as new myStructType()
myStruct.prop1 = "struct1"
myStruct.prop2 = 1
myList.Add(myStruct)

myStruct = new myStructType()
mystruct.prop1 = "number two"
mystruct.prop2 = 2
myList.Add(myStruct)

енді бұл жұмыс істемейді, себебі ол бірдей жадыға сілтеме жасайды. Мен шын мәнінде қалайтын нәрсе - сілтеме типтері үшін пайдаланылатын «құндылығы бойынша сілтеме» мінез-құлқы, сондықтан мен олардың көбісін оңай шығара аламын.

Мұны құрылымды сыныптарға айналдырудан басқа түзетуге қандай да бір тәсіл бар ма? Бұл шын мәнісінде құрылымды қолданудың дұрыс жолы ма, жоқ па?

0
@Hans, рахмет. Егер сіз дұрыс түсінетін болсам, мән түрін ұстап тұратын айнымалы мәнді өткізгенде, шын мәнінде айнымалы мәнге ие құнның көшірмесін өткіземін? Мағынасы көрінеді.
қосылды автор Martijn, көзі
Код жақсы жұмыс істейді, myStructType мәні болып табылады. Тізім құрылымның көшірмелерін сақтайды. Қарап көріңіз.
қосылды автор Hans Passant, көзі

1 жауаптар

Бұл код әр нәрсе үшін new myStructType() шақыратындықтан, бұл құрылым немесе сынып болсын, сол сияқты. Айтуынша, кейінірек myStructType объектілерін шығарып алу және модифицирлеу басқаша әрекет етеді. Егер құрылымнан шыққан болса, сіз деректерді көшіріп алу туралы көшіріп алып, тізімдегі түпнұсқаға тигізбеңіз. Егер ол сыныптан шығарылса, сол нысанға сілтеме жасайсыз және осы сілтеме арқылы жасалған өзгертулер тізімдегі дананы өзгертеді.

Мен сабақтардың орнына құрылымды пайдалану арқылы не істеуге тырысатындығыңызды білгім келеді.

1
қосылды
Бұл оларда ешқандай операцияларсыз тек 3 бит деректер. Осындай құрылым - бұл жай ғана.
қосылды автор Martijn, көзі
Мен үшін қарапайым, өйткені олар жеңіл. Сондай-ақ, олар шын мәнінде кішкентай болғандықтан, оларды теңдестіруге болады (мен оны пайдалануды жоспарламаймын) және олар инициализациядан кейін өзгермейді.
қосылды автор Martijn, көзі
Құрылымды айналдыру (әрбір тапсырма немесе парамтер ретінде пайдалану) құрылымның бүкіл өлшемін көбейтетінін ескеріңіз. Сондықтан егер сізде құрылымда төрт 4 байттық өрістер болған болса (мысалы, бүтін сандар немесе Жол сілтемелері) сіз әр уақытта 12 байтты көшіріп отырасыз. Сыныптағы сол деректер тек бірдей сценарийде 4 байт сілтемесін көшіреді. Неғұрлым тиімді.
қосылды автор tcarvin, көзі
Бірақ қандай да бір артықшылығы бар, бұл құрылымның үстінен сынып бар? Менің ойымша, сіз ештеңе таба алмайсыз. Егер сіз кейінірек мүшелерді өзгертуді жоспарласаңыз, онда сіз міндетті түрде сыныпты пайдалануыңыз керек.
қосылды автор Chris Dunaway, көзі