ඔබ පන්තියක් වෙනුවට ව්‍යුහයක් භාවිතා කරන්නේ කවදාද? [වසා ඇත]


176

Structs එදිරිව පන්ති භාවිතා කළ යුත්තේ කවදාද යන්න පිළිබඳ ඔබේ නීති රීති මොනවාද? මම එම පදවල C # අර්ථ දැක්වීම ගැන සිතමින් සිටිමි, නමුත් ඔබේ භාෂාවට සමාන සංකල්ප තිබේ නම් මම ඔබේ මතය ද අසන්නට කැමැත්තෙමි.

මම සෑම දෙයකටම පාහේ පන්ති භාවිතා කිරීමට නැඹුරු වන අතර, ව්‍යුහයන් භාවිතා කරන්නේ යමක් ඉතා සරල වූ විට පමණක් වන අතර දුරකථන අංකයක් හෝ ඒ හා සමාන දෙයක් වැනි වටිනාකමක් තිබිය යුතුය. නමුත් මෙය සාපේක්ෂව සුළු භාවිතයක් සේ පෙනෙන අතර වඩාත් සිත්ගන්නාසුලු භාවිත අවස්ථා ඇති බව මම විශ්වාස කරමි.



7
UstFrustrated ප්‍රශ්නයක් වෙනත් වෙබ් අඩවියක අනුපිටපතක් ලෙස සලකුණු කළ නොහැක.
ඇඩම් ලයර්

N ආනා ලර්ර්: මම දන්නවා, මම ඡන්දය දුන්නේ අනුපිටපත් වලට සමීප නොවී සංක්‍රමණය වීමටයි. එය සංක්‍රමණය වූ පසු එය අනුපිටපතක් ලෙස නිසියාකාරව වසා දැමිය හැකිය .
FrustratedWithFormsDesigner

5
Rust කලකිරී එය සංක්‍රමණය විය යුතු යැයි මම නොසිතමි.
ඇඩම් ලයර්

15
මෙය P.SE එදිරිව SO ට වඩා ගැළපෙන ප්‍රශ්නයක් සේ පෙනේ. ඒ නිසා තමයි මම මෙතන ඇහුවේ.
RationalGeek

Answers:


170

අනුගමනය කළ යුතු පොදු රීතිය නම්, ව්‍යුහයන් කුඩා, සරල (එක්-මට්ටමේ) ආශ්‍රිත දේපල එකතුවක් විය යුතු අතර ඒවා නිර්මාණය කිරීමෙන් පසු වෙනස් කළ නොහැකි ය; වෙනත් ඕනෑම දෙයක් සඳහා, පන්තියක් භාවිතා කරන්න.

සී # ඉතා හොඳයි, ව්‍යුහයන් සහ පංතිවල අර්ථ දැක්වීමේ මූල පදය හැර ප්‍රකාශයේ පැහැදිලි වෙනස්කම් නොමැත; එබැවින්, ඔබට ව්‍යුහයක් පන්තියකට “උත්ශ්‍රේණිගත” කිරීමට අවශ්‍ය යැයි ඔබට හැඟේ නම් හෝ ඊට ප්‍රතිවිරුද්ධ ලෙස පන්තියක් ව්‍යුහයකට පහත හෙලන්න, එය බොහෝ විට මූලික පදය වෙනස් කිරීමේ සරල කාරණයකි (තවත් ගොචා කිහිපයක් තිබේ; ව්‍යුහයන්ට ව්‍යුත්පන්න කළ නොහැක වෙනත් ඕනෑම පන්තියකින් හෝ ව්‍යුහාත්මක වර්ගයකින් වන අතර ඔවුන්ට පෙරනිමි පරාමිති රහිත ඉදිකිරීම්කරුවෙකු පැහැදිලිව නිර්වචනය කළ නොහැක).

මම "බොහෝ දුරට" කියමි, මන්දයත් ව්‍යුහයන් ගැන දැන ගැනීමට වඩා වැදගත් දෙය නම්, ඒවා වටිනාකම් වර්ග බැවින් ඒවා පන්ති (යොමු වර්ග) ලෙස සැලකීම වේදනාව හා එකහමාරක් විය හැකිය. විශේෂයෙන්, ව්‍යුහයක ගුණාංග විකෘති කිරීම අනපේක්ෂිත ලෙස හැසිරීමට හේතු වේ.

නිදසුනක් ලෙස, ඔබට A සහ ​​B යන ගුණාංග දෙකක් සහිත පන්තියේ සරල පන්තියක් ඇති බව පවසන්න. ඔබ මෙම පන්තියේ පිටපතක් ක්ෂණිකව සකසා, A සහ ​​B ආරම්භ කර, පසුව වෙනත් ක්‍රමයකට යොමු කරන්න. එම ක්‍රමය මඟින් A සහ ​​B තවදුරටත් වෙනස් කරයි. නැවත ඇමතුම් ශ්‍රිතයේ (උදාහරණය නිර්මාණය කළ), ඔබේ නිදසුනෙහි A සහ ​​B වලට ඇමතුම් ක්‍රමය මඟින් ලබා දුන් අගයන් ඇත.

දැන්, ඔබ එය ව්‍යුහයක් බවට පත් කරයි. ගුණාංග තවමත් විකෘති වී ඇත. ඔබ පෙර මෙන් එකම සින්ටැක්ස් සමඟ එකම මෙහෙයුම් සිදු කරයි, නමුත් දැන්, A සහ ​​B හි නව අගයන් ක්‍රමය ඇමතීමෙන් පසුව නොවේ. සිදුවුයේ කුමක් ද? හොඳයි, ඔබේ පන්තිය දැන් ව්‍යුහයකි, එයින් අදහස් වන්නේ එය අගය වර්ගයකි. ඔබ අගය වර්ගයක් ක්‍රමයකට යොමු කරන්නේ නම්, පෙරනිමිය (පිටත හෝ ref යතුරු පදයක් නොමැතිව) “අගය අනුව” සම්මත කිරීමයි; ක්‍රමයේ භාවිතය සඳහා නිදසුනෙහි නොගැඹුරු පිටපතක් සාදනු ලබන අතර, ආරම්භක අවස්ථාව නොවෙනස්ව පවතින විට ක්‍රමය විනාශ වූ විට විනාශ වේ.

මෙම ඊටත් වඩා ඔබ ඔබේ struct සාමාජිකයෙකු ලෙස සඳහනක් වර්ගය ඇති කිරීමට නම් (භව්ය ලෙසින් නොව, අවුල් බවට පත් අතිශය සියලු ම පාහේ අවස්ථාවල දී නරක පුරුදු); පංතිය ක්ලෝන නොකෙරේ (එය ව්‍යුහයේ සඳහනක් පමණි), එබැවින් ව්‍යුහයේ වෙනස්වීම් මුල් වස්තුවට බලපාන්නේ නැත, නමුත් struct හි උප පංතියේ වෙනස්වීම් ඇමතුම් කේතයේ උදාහරණයට බලපායි. මෙය ඉතා පහසුවෙන් නොගැලපෙන තත්වයන් තුළ විකෘති ව්‍යුහයන් තැබිය හැකි අතර එමඟින් දෝෂ ඇති විය හැකි අතර සැබෑ ගැටළුව පවතින තැනට බොහෝ away තින්.

මේ හේතුව නිසා, C # හි ඇති සෑම අධිකාරියක්ම පාහේ පවසන්නේ ඔබේ ව්‍යුහයන් සැමවිටම වෙනස් කළ නොහැකි බවයි; වස්තුවක් තැනීමේදී පමණක් දේපලවල අගයන් නියම කිරීමට පාරිභෝගිකයාට ඉඩ දෙන්න, එම අවස්ථාවෙහි අගයන් වෙනස් කිරීමට කිසි විටෙකත් ක්‍රමයක් සපයන්නේ නැත. කියවීමට පමණක් ඇති ක්ෂේත්‍ර, හෝ ලබා ගත හැකි ගුණාංග රීතිය වේ. පාරිභෝගිකයාට වටිනාකම වෙනස් කිරීමට අවශ්‍ය නම්, ඔවුන්ට අවශ්‍ය වෙනස්වීම් සමඟ පැරණි වස්තුවේ වටිනාකම් මත පදනම්ව නව වස්තුවක් නිර්මාණය කළ හැකිය, නැතහොත් ඔවුන්ට එයම කරන ක්‍රමවේදයක් කැඳවිය හැකිය. මෙය ඔබේ ව්‍යුහයේ එක් අවස්ථාවක් එක් සංකල්පීය “වටිනාකමක්” ලෙස සැලකීමට බල කරයි, වෙන් කළ නොහැකි සහ අනෙක් සියල්ලන්ට වඩා වෙනස් (නමුත් සමහර විට සමාන විය හැකිය). ඔවුන් ඔබේ වර්ගය මගින් ගබඩා කර ඇති "වටිනාකමක්" මත මෙහෙයුමක් සිදු කරන්නේ නම්, ඔවුන්ට ඔවුන්ගේ ආරම්භක අගයට වඩා වෙනස් "වටිනාකමක්" ලැබේ,

හොඳ උදාහරණයක් සඳහා, ඩේටයිම් වර්ගය දෙස බලන්න. ඔබට ඩේටයිම් නිදසුනක කිසිදු ක්ෂේත්‍රයක් කෙලින්ම පැවරිය නොහැක; ඔබ එක්කෝ නව එකක් සෑදිය යුතුය, නැතහොත් පවතින එකක් පිළිබඳව ක්‍රමවේදයක් අමතන්න, එය නව අවස්ථාවක් බිහි කරයි. මෙයට හේතුව දිනය හා වේලාව අංක 5 වැනි “අගයක්” වන අතර අංක 5 ට වෙනස් වීමෙන් 5 නොවන නව අගයක් ලැබෙනු ඇත. 5 + 1 = 6 යන්නෙන් අදහස් නොකෙරේ 5 දැන් 6 යි ඔබ එයට 1 ක් එකතු කළ නිසා. දිනය වේලාවන් එකම ආකාරයකින් ක්‍රියා කරයි; 12:00 "බවට පත් නොවේ" 12:01 ඔබ විනාඩියක් එකතු කළහොත්, ඒ වෙනුවට ඔබට නව අගයක් ලැබෙනු ඇත 12:01 එය 12:00 ට වඩා වෙනස් වේ. මෙය ඔබගේ වර්ගය සඳහා තාර්කික තත්වයක් නම් (.NET වෙත ගොඩනගා නැති හොඳ සංකල්පීය උදාහරණ නම් මුදල්, දුර, බර සහ UOM හි වෙනත් ප්‍රමාණයන් ය. එහිදී මෙහෙයුම් වල වටිනාකමෙහි සියලු කොටස් සැලකිල්ලට ගත යුතුය), ඉන්පසු struct එකක් භාවිතා කර ඒ අනුව එය සැලසුම් කරන්න. වස්තුවක උප අයිතම ස්වාධීනව විකෘති විය යුතු වෙනත් බොහෝ අවස්ථාවන්හිදී, පන්තියක් භාවිතා කරන්න.


1
හොඳ පිළිතුරක්! මම එය කියවීම 'ඩොමේන් ඩ්‍රයිවින් ඩිවලොප්මන්ට්' ක්‍රමවේදය හා පොත වෙත යොමු කරමි, එය ඔබ සැබවින්ම ක්‍රියාත්මක කිරීමට උත්සාහ කරන සංකල්පය මත පදනම්ව යමෙකු පන්ති හෝ ව්‍යුහයන් භාවිතා කළ යුත්තේ මන්ද යන්න පිළිබඳ ඔබේ මතයට තරමක් සම්බන්ධ බව පෙනේ
මැක්සිම් පොප්‍රව්කෝ

1
සඳහන් කිරීම වටී සුළු විස්තරයක්: ඔබට ඔබේම පෙරනිමි ඉදිකිරීම්කරුවෙකු ව්‍යුහයක් මත අර්ථ දැක්විය නොහැක. සෑම දෙයක්ම එහි පෙරනිමි අගයට ආරම්භ කරන එක සමඟ ඔබ කළ යුතුය. සාමාන්‍යයෙන්, එය ඉතා සුළුය, විශේෂයෙන් පන්තියේදී ව්‍යුහාත්මක වීමට හොඳ අපේක්ෂකයෙක්. නමුත් එයින් අදහස් කෙරෙනුයේ පන්තියක් ව්‍යුහයකට වෙනස් කිරීම යනු යතුරු පදයක් වෙනස් කිරීමට වඩා වැඩි යමක් අදහස් කළ හැකි බවයි.
ලෝරන්ට් බෝර්ගෝල්ට්-රෝයි

1
@ ලෝරන්ට්බර්ගෝල්ට් රෝයි - ඇත්ත. තවත් ගොචා ද තිබේ; නිදසුනක් ලෙස, ව්‍යුහයන්ට උරුම ධූරාවලියක් තිබිය නොහැක. ඔවුන්ට අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකි නමුත් System.ValueType හැර වෙනත් කිසිම දෙයකින් ව්‍යුත්පන්න කළ නොහැක (ව්‍යංගයෙන් ඒවා ව්‍යුහයන් වීම).
කීත්

JavaScript dev ලෙස මට කරුණු දෙකක් විමසීමට සිදුවේ. වස්තු සාහිත්‍යය සාමාන්‍ය ව්‍යුහයන්ට වඩා වෙනස් වන්නේ කෙසේද සහ ව්‍යුහයන් වෙනස් කළ නොහැකි වීම වැදගත් වන්නේ ඇයි?
එරික් රෙපන්

1
Ri එරික් රිපන්: ඔබේ ප්‍රශ්න දෙකටම පිළිතුරු වශයෙන්: ශ්‍රිතයක් ශ්‍රිතයක් තුළට ගිය විට එය අගය මගින් සම්මත වේ. පංතියක් සමඟ, ඔබ පන්තියට යොමු කිරීමක් වටා ගමන් කරයි (තවමත් වටිනාකම අනුව). එරික් ලිපර්ට් මෙය ගැටළුවක් වන්නේ මන්දැයි සාකච්ඡා කරයි: blogs.msdn.com/b/ericlippert/archive/2008/05/14/… . කීත්ස්ගේ අවසාන ඡේදය ද මෙම ප්‍රශ්න ආවරණය කරයි.
බ්‍රයන්

14

පිළිතුර: "පිරිසිදු දත්ත තැනීම සඳහා ව්‍යුහයක් භාවිතා කරන්න, සහ මෙහෙයුම් ඇති වස්තු සඳහා පන්තියක්" අනිවාර්යයෙන්ම වැරදි IMO වේ. ව්‍යුහයක් තුළ දේපල විශාල සංඛ්‍යාවක් තිබේ නම් පන්තියක් සෑම විටම පාහේ වඩාත් සුදුසු වේ. මයික්‍රොසොෆ්ට් බොහෝ විට පවසන්නේ කාර්යක්ෂමතා දෘෂ්ටි කෝණයකින් ඔබේ වර්ගය බයිට් 16 ට වඩා විශාල නම් එය පන්තියක් විය යුතු බවයි.

/programming/1082311/why-should-a-net-struct-be-less-than-16-bytes


1
නියත වශයෙන්ම. මට හැකි නම් මම උසස් කරමි. ව්‍යුහයන් දත්ත සඳහා වන අතර වස්තූන් එසේ නොවේ යන අදහස පැමිණියේ කොතැනින්දැයි මට නොතේරේ. C # හි ව්‍යුහයක් යනු තොගයේ වෙන් කිරීම සඳහා වූ යාන්ත්‍රණයක් පමණි. වස්තු දර්ශකයේ පිටපතක් වෙනුවට සමස්ත ව්‍යුහයේ පිටපත් යවනු ලැබේ.
mike30

2
ikemike - C # structs අනිවාර්යයෙන්ම තොගයේ වෙන් නොකෙරේ.
ලී

1
ikemike “structs යනු දත්ත සඳහා” අදහස බොහෝ විට C වැඩසටහන්කරණයෙන් ලබාගත් පුරුද්දෙන් විය හැකිය. C ට පන්ති නොමැති අතර එහි ව්‍යුහයන් දත්ත පමණක් බහාලුම් වේ.
කොනමිමන්

නිසැකවම මයිකල්
කේගේ

10

A classසහ a අතර ඇති වැදගත්ම වෙනස structවන්නේ පහත දැක්වෙන තත්වය තුළ සිදුවන්නේ කුමක්ද:

  දෙයක් 1 = නව දෙයක් ();
  thing1.somePropertyOrField = 5;
  දෙයක් 2 = දෙයක් 1;
  thing2.somePropertyOrField = 9;

අවසාන ප්‍රකාශයේ බලපෑම කුමක් විය යුතුද thing1.somePropertyOrField? නම් Thingවූ struct, සහ somePropertyOrFieldක නිරාවරණය මහජන ක්ෂේත්රයකි, වස්තූන් thing1හා thing2එකිනෙකා සිට "වෙන්" කරනු ලැබේ, ඒ නිසා අවසාන ප්රකාශය බාධාවක් නොවන thing1. නම් Thingපන්ති වේ, එසේ නම් thing1සහ thing2එකිනෙකට බැඳී ඇති අතර, ඒ නිසා දෙවැනි ප්රකාශය ලිවීමට ඇත thing1.somePropertyOrField. කලින් අර්ථ නිරූපණයට වඩා අර්ථවත් වන අවස්ථාවන්හිදී යමෙකු ව්‍යුහයක් භාවිතා කළ යුතු අතර, දෙවන අර්ථ නිරූපණයට වඩා අර්ථවත් වන අවස්ථා වලදී පන්තියක් භාවිතා කළ යුතුය.

යම් දෙයක් විකෘති කිරීමට ඇති ආශාව එය පංතියට පක්ෂව තර්කයක් බව සමහරු උපදෙස් දෙන අතර, මම යෝජනා කරන්නේ ප්‍රතිලෝම සත්‍යයයි: සමහර දත්ත රඳවා තබා ගැනීමේ අරමුණින් පවතින දෙයක් විකෘති වීමට යන්නේ නම්, සහ කිසියම් දෙයකට නිදසුන් සම්බන්ධ වී තිබේද යන්න පැහැදිලි නොවන්නේ නම්, එය වෙනත් දෙයකට සම්බන්ධ නොවන බව පැහැදිලි කිරීම සඳහා එය ව්‍යුහයක් විය හැකිය (නිරාවරණය වූ ක්ෂේත්‍ර සමඟ විය හැක).

උදාහරණයක් ලෙස, ප්‍රකාශ සලකා බලන්න:

  පුද්ගලයා somePerson = myPeople.GetPerson ("123-45-6789");
  somePerson.Name = "මේරි ජොන්සන්"; // "මේරි ස්මිත්" විය

දෙවන ප්‍රකාශය තුළ ගබඩා කර ඇති තොරතුරු වෙනස් myPeopleවේද? Personනිරාවරණය වූ ක්ෂේත්‍ර ව්‍යුහයක් නම්, එය එසේ නොවන අතර එය නිරාවරණය වන ක්ෂේත්‍ර ව්‍යුහයක් වීමේ පැහැදිලි ප්‍රති ence ලයක් නොවනු ඇත ; නම් Personයාවත්කාලීන කිරීමට struct හා එක් පැතුම් වේ myPeople, එක් පැහැදිලිව වගේ දෙයක් කරන්න ඇති බව myPeople.UpdatePerson("123-45-6789", somePerson). නම් Personපන්ති වේ, කෙසේ වෙතත්, එය ඉහත කේතය අන්තර්ගතය යාවත්කාලීන නැහැ යන්න තීරණය කිරීම සඳහා වඩාත් අසීරු විය හැකි MyPeople, සෑම විටම එය යාවත්කාල කිරීම හෝ සමහර විට එය යාවත්කාලීන කරන්න.

ව්‍යුහයන් “වෙනස් කළ නොහැකි” විය යුතුය යන මතය සම්බන්ධයෙන් මම පොදුවේ එකඟ නොවෙමි. “වෙනස් කළ නොහැකි” ව්‍යුහයන් සඳහා වලංගු භාවිත අවස්ථා තිබේ (එහිදී ඉදිකිරීම්කරුවෙකු තුළ වෙනස්වීම් බලාත්මක කරනු ලැබේ) නමුත් එහි ඕනෑම කොටසක් වෙනස් වන ඕනෑම වේලාවක සම්පූර්ණ ව්‍යුහයක් නැවත ලිවිය යුතුය. ක්ෂේත්ර කෙලින්ම. උදාහරණයක් ලෙස, සලකා PhoneNumberසිය ක්ෂේත්ර, අන් අය අතර ඇතුළත්, struct AreaCodeහා Exchangeහා එක් කර සිතමු List<PhoneNumber>. පහත දැක්වෙන බලපෑම ඉතා පැහැදිලි විය යුතුය:

  සඳහා (int i = 0; i <myList.Count; i ++)
  {
    දුරකථන අංකය theNumber = myList [i];
    if (theNumber.AreaCode == "312")
    {
      string newExchange = "";
      if (new312to708Exchanges.TryGetValue (theNumber.Exchange), newExchange වෙතින්)
      {
        theNumber.AreaCode = "708";
        theNumber.Exchange = නව හුවමාරුව;
        myList [i] = theNumber;
      }
    }
  }

ඉහත කේතය කිසිවක් දන්නා හෝ ඕනෑම ක්ෂේත්ර ගැන සැළකිලිමත් වන බව සටහන PhoneNumberවෙනත් වඩා AreaCodeහා Exchange. නම් PhoneNumberඊනියා "මා තුලද" struct විය, එය අවශ්ය එක්කෝ එය ලබා ගත යුතු බවත් withXX, එක් එක් අංශය සඳහා ක්රමය අනුව සඳහන් ක්ෂේත්රයේ සම්මත-අගය පැවති වන නව struct උදාහරණයක් ආපසු කරන, හෝ වෙන අවශ්ය වනු ඇත struct හි සෑම ක්ෂේත්‍රයක් ගැනම දැන ගැනීමට ඉහත වැනි කේත සඳහා. හරියටම ආකර්ෂණීය නොවේ.

බීටීඩබ්ලිව්, ව්‍යුහයන් විකෘති වර්ග සඳහා සාධාරණ ලෙස යොමු දැක්විය හැකි අවස්ථා දෙකක්වත් තිබේ.

  1. ව්‍යුහයේ අර්ථ නිරූපණයන් පෙන්නුම් කරන්නේ එය වස්තුවේ ගුණාංග රඳවා තබා ගැනීමේ කෙටිමඟක් ලෙස නොව, ප්‍රශ්නයේ ඇති වස්තුවේ අනන්‍යතාවය ගබඩා කරන බවයි. නිදසුනක් ලෙස, `KeyValuePair 'මඟින් සමහර බොත්තම් වල අනන්‍යතාවයන් රඳවා ගනු ඇත, නමුත් එම බොත්තම් වල පිහිටීම්, උද්දීපනය කළ තත්වයන් යනාදිය පිළිබඳ නිරන්තර තොරතුරු රඳවා ගැනීමට අපේක්ෂා නොකරනු ඇත.
  2. එම වස්තුව පිළිබඳ එකම සඳහනක් එහි ඇති බව ව්‍යුහය දනී, වෙනත් කිසිවෙකුට යොමු කිරීමක් නොලැබෙන අතර, එම වස්තුවට කවදා හෝ සිදුකරන ඕනෑම විකෘතියක් එය පිළිබඳ සඳහනක් ඕනෑම තැනක ගබඩා වීමට පෙර සිදු කර ඇත.

පෙර අවස්ථාවෙහිදී, වස්තුවේ හැඳුනුම්පත වෙනස් කළ නොහැකි වනු ඇත; දෙවැන්නෙහි, කැදැලි වස්තුවේ පන්තිය වෙනස් කළ නොහැකි බව බලාත්මක කළ නොහැකි නමුත් ව්‍යුහය යොමු කිරීම දරයි.


7

මම ව්‍යුහයන් භාවිතා කිරීමට නැඹුරු වන්නේ එක් ක්‍රමයක් අවශ්‍ය වූ විට පමණි. එබැවින් පන්තියක් සෑදීම “බර” ලෙස පෙනේ. මේ අනුව සමහර විට මම ව්‍යුහයන් සැහැල්ලු වස්තු ලෙස සලකමි. පරෙස්සම් වන්න: මෙය සැමවිටම ක්‍රියාත්මක නොවන අතර සෑම විටම කළ යුතු හොඳම දේ නොවේ, එබැවින් එය ඇත්ත වශයෙන්ම තත්වය මත රඳා පවතී!

අමතර සම්පත්

වඩාත් විධිමත් පැහැදිලි කිරීමක් සඳහා, MSDN මෙසේ කියයි: http://msdn.microsoft.com/en-us/library/ms229017.aspx මෙම සබැඳිය මා ඉහත සඳහන් කළ දේ සනාථ කරයි, ව්‍යුහයන් භාවිතා කළ යුත්තේ සුළු දත්ත ප්‍රමාණයක් නිවාස සඳහා පමණි.


5
වෙනත් වෙබ් අඩවියක ප්‍රශ්න (එම වෙබ් අඩවිය ස්ටක් පිටාර ගැලීම වුවද ) අනුපිටපත් ලෙස ගණන් නොගනී. කරුණාකර ඔබේ පිළිතුර වෙනත් ස්ථානයකට සබැඳි පමණක් නොව සත්‍ය පිළිතුරක් ඇතුළත් කිරීමට පුළුල් කරන්න. සබැඳි කවදා හෝ වෙනස් වුවහොත්, දැන් ලියා ඇති පරිදි ඔබේ පිළිතුර නිෂ් less ල වනු ඇති අතර තොරතුරු ආරක්ෂා කර ගැනීමට සහ ක්‍රමලේඛකයින් හැකි තරම් ස්වයං අන්තර්ගත කිරීමට අපි කැමතියි. ස්තූතියි!
ඇඩම් ලයර්

2
NAnna Lear මට දැනුම් දීම ගැන ස්තූතියි, මෙතැන් සිට එය මතකයේ තබා ගනීවි!
rrazd

2
-1 "මම ව්‍යුහයන් භාවිතා කිරීමට නැඹුරු වන්නේ එක් ක්‍රමයක් අවශ්‍ය වූ විට පමණි. එබැවින් පන්තියක් සෑදීම" බර "ලෙස පෙනේ." ... බර? ඇත්තටම එයින් අදහස් කරන්නේ කුමක්ද? ... ඔබ ඇත්තටම කියන්නේ එක් ක්‍රමයක් ඇති බැවින් එය බොහෝ විට ව්‍යුහයක් විය යුතු බවයි?
bytedev

2

පිරිසිදු දත්ත ඉදිකිරීම් සඳහා ව්‍යුහයක් සහ මෙහෙයුම් ඇති වස්තු සඳහා පන්තියක් භාවිතා කරන්න.

ඔබේ දත්ත ව්‍යුහයට ප්‍රවේශ පාලනයක් අවශ්‍ය නොවන්නේ නම් සහ ලබා ගැනීම / සැකසීම හැර වෙනත් විශේෂ මෙහෙයුම් නොමැති නම්, struct එකක් භාවිතා කරන්න. මෙයින් පැහැදිලි වන්නේ එම ව්‍යුහය සියල්ලම දත්ත සඳහා බහාලුමක් බවයි.

ඔබේ ව්‍යුහයට ව්‍යුහය වඩාත් සංකීර්ණ ආකාරයකින් වෙනස් කරන මෙහෙයුම් තිබේ නම්, පන්තියක් භාවිතා කරන්න. පංතියකට වෙනත් පංති සමඟ ක්‍රමවේදයන් සඳහා තර්ක හරහා අන්තර්ක්‍රියා කළ හැකිය.

එය ගඩොල් සහ ගුවන් යානයක් අතර වෙනස ලෙස සිතන්න. ගඩොල් යනු ව්‍යුහයකි; එහි දිග, පළල සහ උස ඇත. එයට බොහෝ දේ කළ නොහැක. පාලක පෘෂ් moving යන් චලනය කිරීම සහ එන්ජින් තෙරපුම වෙනස් කිරීම වැනි ගුවන් යානයකට එය කෙසේ හෝ විකෘති කරන විවිධ මෙහෙයුම් තිබිය හැකිය. එය පන්තියක් ලෙස වඩා හොඳ වනු ඇත.


2
C # හි "පිරිසිදු දත්ත සැකසුම් සඳහා ව්‍යුහයක් භාවිතා කරන්න, සහ මෙහෙයුම් ඇති වස්තු සඳහා පන්තියක් භාවිතා කරන්න" මෙය විකාරයකි. මගේ පිළිතුර පහතින් බලන්න.
bytedev

1
"පිරිසිදු දත්ත සැකසුම් සඳහා ව්‍යුහයක් සහ මෙහෙයුම් ඇති වස්තු සඳහා පන්තියක් භාවිතා කරන්න." මෙය C / C ++ සඳහා සත්‍ය වේ, C # නොවේ
taktak004
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.