අතුරුමුහුණත් ප්‍රයෝජනවත් වන්නේ ඇයි?


163

මම කාලයක් තිස්සේ C # හි ඉගෙනුම හා කේතකරණය කරමින් සිටිමි. නමුත් තවමත්, මට අතුරුමුහුණත් වල ප්‍රයෝජනය හඳුනාගත නොහැක. ඔවුන් මේසය වෙත ගෙන එන්නේ ඉතා අල්ප වශයෙනි. ක්‍රියාකාරීත්වයේ අත්සන් සැපයීම හැර, ඔවුන් කිසිවක් නොකරයි. ක්‍රියාත්මක කිරීමට අවශ්‍ය කාර්යයන් වල නම් සහ අත්සන මට මතක නම්, ඒවා අවශ්‍ය නොවේ. ඔවුන් එහි සිටින්නේ එම කාර්යයන් (අතුරුමුහුණතෙහි) උරුම පන්තියේ ක්‍රියාත්මක වන බවට වග බලා ගැනීම සඳහා ය.

සී # විශිෂ්ට භාෂාවක් වන නමුත් සමහර විට එය මුලින්ම මයික්‍රොසොෆ්ට් විසින් ගැටලුව නිර්මාණය කරයි (බහු උරුමයට ඉඩ නොදේ) සහ පසුව විසඳුම සපයයි යන හැඟීම ඔබට ලබා දෙයි, එය වෙහෙසකර එකක් වේ.

සීමිත කේතීකරණ අත්දැකීම් මත පදනම් වූ මගේ අවබෝධය එයයි. ඔබ අතුරුමුහුණත් ගැන ගන්නේ කුමක්ද? ඔබ ඒවා කොපමණ වාරයක් භාවිතා කරනවාද සහ එසේ කිරීමට හේතුව කුමක්ද?


55
"ක්‍රියාවට නැංවීමට අවශ්‍ය කාර්යයන් වල නම් සහ අත්සන මට මතක නම්, ඒවා අවශ්‍ය නොවේ." සංඛ්‍යාත්මකව ටයිප් කළ භාෂාවල ඇති වාසි පිළිබඳව ඔබ තව ටිකක් සොයා බැලිය යුතු යැයි මෙම ප්‍රකාශය මට සැක කරයි .
ස්ටීවන් ජියුරිස්

37
සී # අමතක කරන්න, ජාවා අමතක කරන්න, භාෂාව අමතක කරන්න. එය හුදෙක් OO අනුව සිතීමයි. රොබට් සී. මාටින්, මාටින් ෆෝලර්, මයිකල් ෆෙදර්ස්, කල්ලියේ හතර වැනි අයගෙන් කියවීමේ තොරතුරු ලබා ගැනීමට මම ඔබව දිරිමත් කරමි. එය ඔබේ චින්තනය පුළුල් කිරීමට උපකාරී වනු ඇත.
ඇන්තනි පෙග්‍රෑම්

27
හොඳ අතුරුමුහුණත් මොනවාදැයි වටහා ගැනීමට මට අවුරුදු දෙකකට වඩා ගත විය. මගේ යෝජනාව: සැලසුම් රටා අධ්‍යයනය කරන්න. ඒවායින් බොහොමයක් අතුරුමුහුණත් මත රඳා පවතින බැවින් ඒවා එතරම් ප්‍රයෝජනවත් වන්නේ මන්දැයි ඔබට ඉක්මනින් වැටහෙනු ඇත.
ඔලිවර් වෙයිලර්

38
මිතුරා ඉගෙන ගැනීමට ඔබට බොහෝ දේ ඇත.
ChaosPandion

61
HaChaosPandion අපි හැමෝටම ඉගෙන ගැනීමට බොහෝ දේ ඇත
kenwarner

Answers:


156

ඔවුන් එහි සිටින්නේ එම කාර්යයන් (අතුරුමුහුණතෙහි) උරුම පන්තියේ ක්‍රියාත්මක වන බවට වග බලා ගැනීම සඳහා ය.

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

එයින් කියැවෙන්නේ, අතුරු මුහුණත් යනු ගිවිසුම්ගත බැඳීම් නියෝජනය කිරීම සඳහා තරමක් දුර්වල ක්‍රමයකි. ගිවිසුම්ගත බැඳීම් නියෝජනය කිරීම සඳහා ඔබට වඩා ශක්තිමත් හා නම්‍යශීලී ක්‍රමයක් අවශ්‍ය නම්, විෂුවල් ස්ටුඩියෝ හි අවසාන අනුවාදය සමඟ නැව්ගත කළ කේත කොන්ත්‍රාත් විශේෂාංගය සොයා බලන්න.

සී # විශිෂ්ට භාෂාවක් වන නමුත් සමහර විට එය මුලින්ම මයික්‍රොසොෆ්ට් විසින් ගැටළුව නිර්මාණය කරයි (බහු උරුමයට ඉඩ නොදේ) සහ පසුව විසඳුම සපයයි යන හැඟීම ඔබට ලබා දෙයි.

හොඳයි, ඔබ එයට කැමති වීම ගැන මට සතුටුයි.

සියළුම සංකීර්ණ මෘදුකාංග සැලසුම් එකිනෙකට පටහැනි අංගයන් කිරා මැන බැලීමේ ප්‍රති result ලයක් වන අතර කුඩා වියදම් සඳහා විශාල ප්‍රතිලාභ ලබා දෙන “මිහිරි ස්ථානය” සොයා ගැනීමට උත්සාහ කරයි. ක්‍රියාවට නැංවීමේ අරමුණු සඳහා බහු උරුමයන්ට ඉඩ දෙන භාෂාවන්ට සාපේක්ෂව කුඩා ප්‍රතිලාභ සහ සාපේක්ෂව විශාල පිරිවැයක් ඇති බව වේදනාකාරී අත්දැකීම් තුළින් අපි ඉගෙන ගතිමු . ක්‍රියාත්මක කිරීමේ තොරතුරු බෙදා නොගන්නා අතුරුමුහුණත් මත පමණක් බහු උරුමය ලබා දීම, බොහෝ වියදම් නොමැතිව බහු උරුමයේ ප්‍රතිලාභ ලබා දෙයි.


මම කියවමින් සිටියේ "මයික්‍රොසොෆ්ට් ගැටළුව නිර්මාණය කරන්නේ බහු උරුමයකට ඉඩ නොදීමෙන්" සහ එරික් ලිපර්ට්ට ඒ ගැන යමක් කීමට ඇතැයි මම සිතුවෙමි.
වින්‍යාසය

මෙම පිළිතුරට වඩාත් අදාළ වන්නේ: එරික්, ඔබ ඉල්ලුම්කරු කේත කොන්ත්‍රාත්තු වෙත යොමු කරයි, නමුත් ඒවා දුක්ඛිත ලෙස අසම්පූර්ණයි; මූලික ගිවිසුම් හැර වෙනත් කිසිවක් ස්ථිතික පරීක්ෂකයා විසින් බලාත්මක කළ නොහැක. මම කුඩා ව්‍යාපෘතියක කේත කොන්ත්‍රාත්තුව භාවිතා කිරීමට උත්සාහ කළෙමි; ආදානය සහ ප්‍රතිදානය පිළිබඳ මට කළ හැකි සෑම දෙයක්ම සඳහන් කරන සෑම ක්‍රමයක් සඳහාම මම පේළි සිය ගණනක් එකතු කර ඇත්තෙමි, එහෙත්, Assumeඅරාව හෝ ගණන් ගැනීමේ සාමාජිකයන් වැනි අවස්ථා සඳහා මට බොහෝ ඇමතුම් එක් කිරීමට සිදුවිය . සෑම දෙයක්ම එකතු කිරීමෙන් සහ මා සතුව තිබූ සංඛ්‍යාත්මකව සත්‍යාපනය වූ අවුල් දැකීමෙන් පසුව, මම ප්‍රභව පාලනයට ආපසු ගියෙමි, එය මගේ ව්‍යාපෘතියේ ගුණාත්මකභාවය අඩු කළ නිසාය.
වින්‍යාසය

17
f වින්‍යාස කරන්නා: ඒවා සම්පූර්ණ කළ නොහැකි නිසා ඒවා අසම්පූර්ණයි; අත්තනෝමතික කොන්ත්රාත් සමඟ ස්ථිතික වැඩසටහන් සත්යාපනය හැල්ටිං ගැටළුව විසඳීමට සමාන වේ. . විශ්වයේ තාප මරණයට පෙර ස්ථිතික සත්‍යාපකය එහි වැඩ නිම කරනු ඇතැයි ඔබ අපේක්ෂා කරන්නේ නම් එය යුක්තිසහගත ලෙස භාවිතා කළ යුතුය. (ඔබේ පැමිණිල්ල නම් බීසීඑල් ප්‍රමාණවත් ලෙස විවරණය කර නොමැති නම්: මම එකඟ වෙමි.)
එරික් ලිපර්ට්

2
ප්‍රති method ල අරා හෝ ගණන් බැලීම් වල ශුන්‍ය නොවන බව එක් ක්‍රමයක් පොරොන්දු වූ විට, භාවිතා කිරීමේ ක්‍රමයට ශුන්‍යයට ඉඩ නොදෙන ස්ථානවල අගයන් භාවිතා කළ හැකි බව මම තේරුම් ගනිමි. එය එසේ නොවන බව මා බලාපොරොත්තු වූ එකම දෙය එයයි, එය නොමැතිව භාවිතයට ගැනීම ඉතා වැදගත් ය; වෙන ඕනෑම දෙයක් ප්‍රසාද දීමනාවක් පමණි. ස්ථිතික සත්‍යාපනය සම්පූර්ණ කළ නොහැකි බව මම දනිමි, එබැවින් කොන්ත්‍රාත් සඳහා විශ්වාසය තැබීම හොඳ විකල්පයක් නොවන බව මම සිතමි.
වින්‍යාසය

9
+1 සඳහා "හොඳයි, ඔබ එයට කැමති වීම ගැන මට සතුටුයි." අනිත් හැම දෙයක්ම.
රොබට් එස්.

241

රූප විස්තරය මෙහි ඇතුළත් කරන්න

එබැවින් මෙම උදාහරණයේ දී පවර්සොකට් අනෙක් වස්තූන් ගැන වෙන කිසිවක් දන්නේ නැත. වස්තූන් සියල්ලම පවර්සොකට් විසින් සපයනු ලබන බලය මත රඳා පවතී, එබැවින් ඒවා IPowerPlug ක්‍රියාත්මක කරන අතර එසේ කිරීමෙන් ඒවාට එයට සම්බන්ධ විය හැකිය.

එකිනෙකා ගැන වෙන කිසිවක් දැන ගැනීමකින් තොරව වස්තූන් එකට වැඩ කිරීමට භාවිතා කළ හැකි ගිවිසුම් සපයන බැවින් අතුරුමුහුණත් ප්‍රයෝජනවත් වේ.


4
පහළ වම්පස වස්තුව එය ක්‍රියාත්මක කරන බවක් නොපෙනේ IPowerPlug =)
ස්ටීවන් ස්ට්‍රිගා

102
අපරාදේ, නමුත් විවිධ රටවල IPowerPlug භාවිතා කිරීම සඳහා අපට ඇඩැප්ටර රටාවක් භාවිතා කිරීමට සිදුවේ!
ස්ටීවන් ජියුරිස්

අතුරුමුහුණත වටා වැඩ කිරීම සඳහා ජෙරී-රිගින් කිරීම ආරක්ෂිත නොවේ (නමුත් සමහර අය තවමත් එය බොහෝ විට සිදු කරන්නේ කාර්ය සාධනය පරීක්ෂා නොකළ නිදහසට කරුණක් ලෙස උපුටා දක්වමිනි), සහ ගින්නකට තුඩු දිය හැකිය.
යං ජෝන්

5
මෙම පිළිතුර පුදුම සහගතය ...
මාරියෝ ගාර්ෂියා

මෙම පිළිතුර පෙන්වා දීමෙන් කියැවෙන්නේ නැත - මෙම විශේෂිත උදාහරණයේ - අතුරු මුහුණතක් භාවිතා කිරීම උරුමයට වඩා සුදුසු වන්නේ ඇයි. අතුරු මුහුණත් වලට අළුත් කෙනෙකු ඇසිය හැකිය, ඒවා සියල්ලම උරුම නොවන්නේ ඇයි කියා. උදා: සියලු ප්ලග් ක්‍රියාකාරිත්වය සපයන MainsPoweredDevice, සොකට් මගින් MainsPoweredDevice වෙතින් ලබාගත් ඕනෑම දෙයක් පිළිගනී.
අමුද්‍රව්‍යය_15939

145

ක්‍රියාකාරීත්වයේ අත්සන් සැපයීම හැර, ඔවුන් කිසිවක් නොකරයි. ක්‍රියාත්මක කිරීමට අවශ්‍ය කාර්යයන් වල නම් සහ අත්සන මට මතක නම්, ඒවා අවශ්‍ය නොවේ

අතුරුමුහුණත් වල ලක්ෂ්‍යය වන්නේ ක්‍රියාත්මක කළ යුතු ක්‍රමය මතක තබා ගැනීමට ඔබට උදව් කිරීම නොවේ, මෙහි ඇත්තේ කොන්ත්‍රාත්තුවක් අර්ථ දැක්වීම සඳහා ය . දී foreach P.Brian.Mackey උදාහරණයක් (එය වැරදි බවට පත්වන , නමුත් අපි වැඩක් නැත), IEnumerable අතර කොන්ත්රාත්තුවක් නිර්වචනය foreach හා ඕනෑම ගණ්ය දෙයක්. එහි මෙසේ සඳහන් වේ: "ඔබ කවුරු වුවත්, ඔබ කොන්ත්රාත්තුවට ඇලී සිටින තාක් කල් (IEnumerable ක්රියාත්මක කරන්න), මම ඔබට පොරොන්දු වෙනවා මම ඔබේ සියලු අංගයන් ගැන නැවත කියනු ඇත". තවද, එය විශිෂ්ටයි (ගතික නොවන භාෂාවක් සඳහා).

අතුරුමුහුණත් වලට ස්තූතියි ඔබට පන්ති දෙකක් අතර ඉතා අඩු සම්බන්ධතාවයක් ලබා ගත හැකිය.



"තාරා ටයිප් කිරීම" යන යෙදුම භාවිතා කිරීමට මා අකමැති නිසා එය විවිධ පුද්ගලයින්ට වෙනස් දේ අදහස් කරයි. අපි "foreach" පුඩුවට රටා ගැලපීම භාවිතා කරමු, මන්ද එය නිර්මාණය කරන විට, IEnumerable <T> ලබා ගත නොහැකි විය. අපට අවශ්‍ය “මොනාඩ් රටාව” ග්‍රහණය කර ගැනීමට C # වර්ගයේ පද්ධතිය දුර්වල බැවින් අපි LINQ සඳහා රටා ගැලපීම භාවිතා කරමු; ඔබට හැස්කල් වර්ගයේ පද්ධතිය වැනි දෙයක් අවශ්‍ය වේ.
එරික් ලිපර්ට්

Ric එරික්: “රටා ගැලපීම” ට එකම ගැටළුවක් නැද්ද? එය ඇසෙන විට මම හිතන්නේ F # / Scala / Haskell. නමුත් මම හිතන්නේ එය තාරා ටයිප් කිරීමට වඩා පුළුල් අදහසක්.
ඩැනියෙල්

An ඩැනියෙල්: ඔව්, මම හිතන්නේ ඒක එහෙමයි. එහි හය දුසිම් එකහමාරක් මම අනුමාන කරමි!
එරික් ලිපර්ට්

37

හොඳින් විසන්ධි වූ ඉදිකිරීම් පවත්වා ගැනීමට හොඳම ක්‍රමය අතුරුමුහුණත් වේ.

පරීක්ෂණ ලිවීමේදී, ඔබේ පරීක්ෂණ පරිසරය තුළ කොන්ක්‍රීට් පන්ති ක්‍රියා නොකරන බව ඔබට පෙනී යනු ඇත.

උදාහරණයක් ලෙස: ඔබට මත රඳා පවතින බව පන්ති පරීක්ෂා කිරීමට අවශ්ය දත්ත ප්රවේශ සේවාව පන්තියේ. එම පංතිය වෙබ් සේවාවක් හෝ දත්ත සමුදායක් සමඟ කතා කරන්නේ නම් - ඔබේ පරීක්ෂණ පරිසරය තුළ ඔබේ ඒකක පරීක්ෂණය ක්‍රියාත්මක නොවනු ඇත (ඊට අමතරව එය ඒකාබද්ධ කිරීමේ පරීක්ෂණයක් බවට පත්ව ඇත).

විසඳුමක්? භාවිතය, අතුරුමුහුණත සඳහා ඔබේ දත්ත ප්රවේශ සේවාව හා සමච්චල් ඔබ ඒකකයක් ලෙස ඔබේ පන්තියේ පරීක්ෂා කළ හැකි නිසා බව අතුරු මුහුණත.

අනෙක් අතට, WPF සහ Silverlight බන්ධනය කිරීමේදී අතුරු මුහුණත් සමඟ කිසිසේත් ක්‍රියා නොකරයි. මෙය ලස්සන අප්රසන්න රැල්ලකි.


2
ඇහුම්කන් දෙන්න! බහුමාපකය වැනි වෙනත් ගැටළු විසඳීම සඳහා අතුරුමුහුණත් නිර්මාණය කරන ලදී. කෙසේ වෙතත්, මට නම්, යැපුම් එන්නත් කිරීමේ රටාවක් ක්‍රියාත්මක කිරීමේදී ඒවා තමන්ගේම තත්වයට පැමිණේ.
andy

30

අතුරුමුහුණත් යනු (ස්ථිතික) බහුමාපකයේ කොඳු නාරටියයි! වැදගත් වන්නේ අතුරු මුහුණතයි. උප පංති මූලික වශයෙන් මවුපියන්ගේ දැනටමත් ක්‍රියාත්මක කර ඇති අතුරු මුහුණත උරුම කර ගන්නා බැවින්, අතුරු මුහුණත් නොමැතිව උරුමය ක්‍රියාත්මක නොවේ.

ඔබ ඒවා කොපමණ වාරයක් භාවිතා කරනවාද සහ එසේ කිරීමට හේතුව කුමක්ද ??

බොහෝ විට. ප්ලග් කළ යුතු සෑම දෙයක්ම මගේ යෙදුම්වල අතුරු මුහුණතක් වේ. බොහෝ විට ඔබට වෙනත් ආකාරයකින් සම්බන්ධ නොවූ පංති ඇති අතර එම හැසිරීමම සැපයිය යුතුය. ඔබට උරුමය සමඟ එවැනි ගැටළු විසඳිය නොහැක.

එකම දත්ත මත මෙහෙයුම් සිදු කිරීමට විවිධ ඇල්ගොරිතම අවශ්‍යද? අතුරු මුහුණතක් භාවිතා කරන්න ( උපාය රටාව බලන්න )!

ඔබට විවිධ ලැයිස්තු ක්‍රියාත්මක කිරීම් භාවිතා කිරීමට අවශ්‍යද? අතුරුමුහුණතකට එරෙහිව කේතය සහ ඇමතුම ක්‍රියාත්මක කිරීම ගැන කරදර විය යුතු නැත!

එක් හේතුවක් නිසා, අවුරුදු ගණනක් තිස්සේ අතුරුමුහුණත් වලට එරෙහිව කේත කිරීම හොඳ පුරුද්දක් ලෙස (ඕඕපී හි පමණක් නොවේ) සලකනු ලැබේ: ක්‍රියාත්මක කිරීම ඔබේ අවශ්‍යතාවන්ට නොගැලපෙන බව ඔබ තේරුම් ගත් විට එය වෙනස් කිරීම පහසුය. ඔබ එය බහු උරුමයකින් පමණක් සාක්ෂාත් කර ගැනීමට උත්සාහ කරන්නේ නම් හෝ අවශ්‍ය අතුරුමුහුණත ලබා දීම සඳහා හිස් පන්ති නිර්මාණය කිරීමට එය තල්ලු වේ.


1
බහුමාපකය ගැන කවදාවත් අසා නැත, ඔබ අදහස් කළේ බහුමාපකයද?
ස්ටීවන් ජියුරිස්

1
මයික්‍රොසොෆ්ට් විසින් පළමු වරට බහුවිධ උරුමයන් ලබා ගැනීමට ඉඩ දුන්නේ නම්, අතුරුමුහුණත් පැවතීමට කිසිදු හේතුවක් නොතිබෙනු ඇත
පන්කාජ් උපාධ්‍යා

11
Ank පන්කාජ් උපාධ්‍යා: බහු උරුමය සහ අතුරුමුහුණත් සපත්තු යුගල දෙකකි. විවිධ හැසිරීම් සහිත සම්බන්ධයක් නැති පන්ති දෙකක අතුරු මුහුණතක් ඔබට අවශ්‍ය නම් කුමක් කළ යුතුද? ඔබට එය බහු උරුමයකින් විසඳිය නොහැක. ඔබ එය කෙසේ හෝ වෙන වෙනම ක්‍රියාත්මක කළ යුතුය. බහුමාමක හැසිරීම සැපයීම සඳහා අතුරු මුහුණත විස්තර කිරීමට ඔබට යමක් අවශ්‍ය වේ. බහුවිධ උරුමය බොහෝ අවස්ථාවන්හි පහළට ඇවිදීමට අන්ධ මංතීරුවක් වන අතර ඉක්මනින් හෝ පසුව පාදයට වෙඩි තැබීම පහසුය.
ෆැල්කන්

1
සරල කිරීමට ඉඩ දෙමු. මගේ අතුරුමුහුණත මඟින් සංදර්ශන සහ අදහස් දැක්වීමේ කාර්යයන් දෙකක් ක්‍රියාත්මක කරන්නේ නම් සහ මට ඒවා ක්‍රියාත්මක කරන පන්තියක් තිබේ. එහෙනම් ඇයි මම අතුරු මුහුණත ඉවත් කර සෘජුවම කාර්යයන් භාවිතා නොකරන්නේ. මා පවසන දෙය නම් ඒවා හුදෙක් ක්‍රියාත්මක කිරීමට අවශ්‍ය කාර්යයන් වල නම් ඔබට ලබා දීමයි. යමෙකුට එම කාර්යයන් මතක තබා ගත හැකි නම් අතුරු මුහුණතක් නිර්මාණය කරන්නේ ඇයි
පන්කාජ් උපාධ්‍යා

9
Ank පන්කාජ්, ඔබට අවශ්‍ය අතුරු මුහුණත නම්, එය භාවිතා නොකරන්න. පංතියේ සෑම අංශයක් ගැනම නොදැන ඔබ එහි මූලික වර්ගය, එනම් අතුරුමුහුණත අනුව ප්‍රවේශ වීමට අවශ්‍ය වැඩසටහනක් ඇති විට ඔබ අතුරු මුහුණතක් භාවිතා කරයි. ඔවුන්ට උප පංති කිසිවක් දැන ගැනීමට අවශ්‍ය නැත, එය අතුරු මුහුණතේ වර්ගයට සමාන ය. එනිසා ඔබට වස්තුවේ අතුරුමුහුණත වෙත යොමු කිරීමෙන් උප පංතියේ ක්‍රියාත්මක කළ ක්‍රමය අමතන්න. මෙය මූලික උරුමය සහ සැලසුම් දේවල් වේ. එය නොමැතිව, ඔබ සී භාවිතා කළ හැකිය. ඔබ එය පැහැදිලිවම භාවිතා නොකළද, රාමුව එය නොමැතිව ක්‍රියා නොකරනු ඇත.
ජොනතන් හෙන්සන්

12

ඔබ බොහෝ විට භාවිතා foreachකර ඇති අතර එය ඉතා ප්‍රයෝජනවත් පුනරාවර්තන මෙවලමක් බව සොයාගෙන ඇත. ඔබ එය කාර්යය සඳහා අතුරු මුහුණත අවශ්ය බව ඔබ දැන සිටියාද, IEnumerable ?

එය නිසැකවම අතුරු මුහුණතක ඇති ප්‍රයෝජන ගැන කථා කරන කොන්ක්‍රීට් නඩුවකි.


5
ඇත්ත වශයෙන්ම, foreach සඳහා IEnumerable අවශ්‍ය නොවේ: msdn.microsoft.com/en-us/library/9yb8xew9%28VS.80%29.aspx
Matt H

1
මම ඒ සියල්ල අධ්‍යයනය කර ඇති නමුත් එය හරියට අනෙක් අතෙන් කණ අල්ලා ගැනීමක් මෙනි. බහුවිධ උරුමයන්ට ඉඩ දුන්නේ නම්, අතුරු මුහුණත බොහෝ දුර තේරීමක් වනු ඇත.
පන්කාජ් උපාධ්‍යා

2
අතුරුමුහුණත් බහු උරුමයක් වන අතර එය බොහෝ විට අමතක වේ. කෙසේ වෙතත්, ඔවුන් හැසිරීම සහ රාජ්යයේ බහු උරුමයට ඉඩ නොදේ. මික්සින් හෝ ගති ලක්ෂණ හැසිරීමේ බහු උරුමයට ඉඩ දෙයි, නමුත් ගැටළු ඇති කරන හවුල් තත්වයක් නොවේ: en.wikipedia.org/wiki/Mixin
Matt H

Ank පන්කාජ්, ඕෆ්ටොපික්, නමුත් මම ඔබේ මව් භාෂාව කුමක්දැයි ඇසුවොත් ඔබට කමක් නැද්ද? "අනෙක් අතින් කණ අල්ලා ගැනීම" විශාල මෝඩකමක් වන අතර එය පැමිණෙන්නේ කොහෙන්දැයි මට කුතුහලයක් ඇති විය.
කෙවින්

3
Ce අයිස්මන්. LOL .... මම ඉන්දියාවේ සිට මෙන්න එය පොදු මෝඩකමක් වන අතර එය පිළිබිඹු කරන්නේ පහසු දේ දුෂ්කර ආකාරයකින් කිරීම ය.
පන්කාජ් උපාධ්‍යා

11

අතුරුමුහුණත් යනු ගෘහස්ථ රැහැන්වලට ප්ලග් වැනි වස්තු කේතනය කිරීමයි. ඔබ ඔබේ ගුවන්විදුලිය කෙලින්ම ඔබේ නිවසේ රැහැන්වලට යොදනවාද? ඔබේ වැකුම් ක්ලීනර් ගැන කුමක් කිව හැකිද? ඇත්ත වශයෙන්ම නැත. ප්ලග් එක සහ එයට ගැලපෙන වෙළඳසැල, ඔබේ නිවසේ රැහැන් සහ එයින් විදුලිය අවශ්‍ය උපාංගය අතර “අතුරුමුහුණත” සාදයි. ඔබගේ නිවසේ රැහැන් උපාංගය ගැන ත්‍රිමාන භූගත ප්ලග් එකක් භාවිතා කිරීම හැර 120VAC <= 15A හි විදුලි බලය අවශ්‍ය වේ. ඊට ප්‍රතිවිරුද්ධව, ඔබගේ නිවස රැහැන්ගත කර ඇති ආකාරය පිළිබඳ උපක‍්‍රමශීලී දැනුමක් උපාංගයට අවශ්‍ය නොවේ. 120VAC <= 15A සපයන පහසුවෙන්ම පිහිටා ඇති තට්ටු තුනක අලෙවිසැල් එකක් හෝ වැඩි ගණනක් එහි තිබේ.

අතුරුමුහුණත් කේතයේ ඉතා සමාන කාර්යයක් ඉටු කරයි. කිසියම් විචල්‍යයක්, පරාමිතියක් හෝ ආපසු වර්ගයක් අතුරුමුහුණත් වර්ගයක් බව වස්තුවකට ප්‍රකාශ කළ හැකිය. අතුරු මුහුණත කෙලින්ම newයතුරු පදයකින් ක්ෂණිකව ස්ථාපනය කළ නොහැක , නමුත් මගේ වස්තුවට එය ක්‍රියාත්මක කිරීමට අවශ්‍ය වන අතුරු මුහුණත ක්‍රියාත්මක කිරීම ලබා දිය හැකිය. වස්තුවට එහි පරායත්තතාවය ඇති වූ පසු, එම පරායත්තතාවය කුමක්දැයි හරියටම දැන ගැනීමට අවශ්‍ය නැත, එය යැපීම මත X, Y සහ Z ක්‍රම ඇමතිය හැකි බව දැන සිටිය යුතුය. අතුරුමුහුණත ක්‍රියාත්මක කිරීමේදී ඒවා භාවිතා කරන්නේ කෙසේදැයි දැන ගැනීමට අවශ්‍ය නැත, ඔවුන් විශේෂිත අත්සන් සහිත X, Y සහ Z ක්‍රම ලබා දීමට අපේක්ෂා කරන බව දැන සිටිය යුතුය.

මේ අනුව, එකම අතුරුමුහුණත පිටුපස බහුවිධ වස්තු සාරාංශ කිරීමෙන්, ඔබ එම අතුරුමුහුණතේ ඕනෑම වස්තුවක පාරිභෝගිකයාට පොදු ක්‍රියාකාරීත්වයක් සපයයි. වස්තුව, උදාහරණයක් ලෙස, ලැයිස්තුවක්, ශබ්දකෝෂයක්, සම්බන්ධිත ලැයිස්තුවක්, ඇණවුම් ලැයිස්තුවක් හෝ වෙනත් දෙයක් බව ඔබ දැනගත යුතු නැත. මේ සියල්ලම IEnumerables බව ඔබ දන්නා නිසා, ඔබට මෙම එකතුවෙහි ඇති එක් එක් මූලද්‍රව්‍යයන් එකවර බැලීමට IEnumerable ක්‍රම භාවිතා කළ හැකිය. ප්‍රතිදාන පන්තිය යනු කොන්සෝල රයිටරයක්, ෆයිල් රයිටරයක්, නෙට්වර්ක්ස්ට්‍රීම් රයිටරයක් ​​හෝ වෙනත් වර්ගයේ ලේඛකයින් රැගෙන යන මල්ටිකාස්ට් රයිටරයක් ​​බව ඔබ දැන සිටිය යුතු නැත; ඔබ දැනගත යුතු දෙය නම්, ඔවුන් සියල්ලම IWriters (හෝ කුමක් වුවත්) වන අතර, ඒ නිසා ඔවුන් ඔබට "ලියන්න" ක්‍රමයක් ඇති අතර එමඟින් ඔබට නූලක් යැවිය හැකි අතර එම නූල ප්‍රතිදානය වනු ඇත.


7

ක්‍රමලේඛකයාට (මුලදී, අවම වශයෙන්) බහු උරුමයක් තිබීම පැහැදිලිවම සංග්‍රහයක් වන අතර, මෙය බොහෝ දුරට සුළු අතපසු වීමක් වන අතර, ඔබ (බොහෝ අවස්ථාවන්හිදී) බහු උරුමය මත රඳා නොසිටිය යුතුය. මේ සඳහා හේතු සංකීර්ණ ය, නමුත් ඔබට ඒ ගැන සැබවින්ම ඉගෙන ගැනීමට අවශ්‍ය නම්, එයට සහාය දක්වන වඩාත් ප්‍රසිද්ධ ( TIOBE දර්ශකය අනුව ) ක්‍රමලේඛන භාෂා දෙකේ අත්දැකීම් සලකා බලන්න : C ++ සහ Python (3 වන සහ 8 වන ගෞරවනීය).

පයිතන්හිදී, බහු උරුමයට සහය දක්වයි, නමුත් ක්‍රමලේඛකයින් විසින් විශ්වීය වශයෙන් පාහේ වරදවා වටහාගෙන ඇති අතර එය ක්‍රියාත්මක වන ආකාරය ඔබ දන්නා බව ප්‍රකාශ කිරීම යන්නෙන් අදහස් කරන්නේ මාතෘකාව පිළිබඳ මෙම පත්‍රය කියවා තේරුම් ගැනීමයි: ක්‍රම විභේදන නියෝගය . පයිතන්හි සතුටට පත්වන තවත් දෙයක් නම්, භාෂාවට අන්තර්ග්‍රහණය කළ හැකි අතුරු මුහුණත් - Zope.Interfaces.

C ++ සඳහා, google "දියමන්ති ධූරාවලිය C ++" සහ ඔබ ආවරණය කිරීමට යන කැත බව බලන්න. C ++ වාසි බහු උරුමයක් භාවිතා කරන්නේ කෙසේදැයි දනී. අනෙක් සියල්ලන්ම සාමාන්‍යයෙන් සෙල්ලම් කරන්නේ එහි ප්‍රති results ල කුමක් දැයි නොදැන ය. අතුරුමුහුණත් කෙතරම් ප්‍රයෝජනවත්ද යන්න පෙන්වන තවත් දෙයක් නම්, බොහෝ අවස්ථාවලදී පන්තියකට තම දෙමව්පියන්ගේ හැසිරීම සම්පූර්ණයෙන්ම ඉක්මවා යාමට අවශ්‍ය විය හැකිය. එවැනි අවස්ථාවන්හිදී, දෙමව්පියන් ක්‍රියාත්මක කිරීම අනවශ්‍ය වන අතර, දෙමව්පියන්ගේ පුද්ගලික විචල්‍යයන් සඳහා මතකය සමඟ ළමා පන්තියට පමණක් බරක් වන අතර, එය C # යුගයේ වැදගත් නොවිය හැකි නමුත් ඔබ කාවැද්දූ ක්‍රමලේඛන කරන විට වැදගත් වේ. ඔබ අතුරු මුහුණතක් භාවිතා කරන්නේ නම්, එම ගැටළුව නොපවතී.

අවසාන වශයෙන්, අතුරු මුහුණත් OOP හි අත්‍යවශ්‍ය අංගයක් වන අතර ඒවා කොන්ත්‍රාත්තුවක් බලාත්මක කරයි. සීමිත අවස්ථා වලදී බහු උරුමය ප්‍රයෝජනවත් වන අතර සාමාන්‍යයෙන් එය භාවිතා කරන්නේ කෙසේදැයි දන්නා පිරිමි ළමයින්ට පමණි. එබැවින්, ඔබ ආරම්භකයකු නම්, බහු උරුමයක් නොමැතිකම නිසා ඔබ සලකනු ලබන්නේ - මෙය වැරැද්දක් නොකිරීමට වඩා හොඳ අවස්ථාවක් ලබා දෙයි .

එසේම, ically තිහාසික වශයෙන්, අතුරු මුහුණතක් සඳහා අදහස මුල් බැස ඇත්තේ මයික්‍රොසොෆ්ට් හි සී # සැලසුම් පිරිවිතරයන්ට වඩා බොහෝ කලකට පෙරය. බොහෝ අය C # ජාවා වලට වඩා වැඩි දියුණු කිරීමක් ලෙස සලකති (බොහෝ සංවේදීතාවන්හි), සහ C # එහි අතුරුමුහුණත් ලබා ගත්තේ කොහෙන්දැයි අනුමාන කරන්න - ජාවා. ප්‍රොටෝකෝලය එකම සංකල්පයක් සඳහා පැරණි වචනයක් වන අතර එය .NET ට වඩා පැරණි ය.

යාවත්කාලීන කිරීම: දැන් මට පෙනෙන්නේ මම වෙනත් ප්‍රශ්නයකට පිළිතුරු දී ඇති බවයි - ඒ වෙනුවට අතුරුමුහුණත් බහු උරුමයක් වන්නේ ඇයි, නමුත් මෙය ඔබ සොයන පිළිතුර ලෙස පෙනුනි. OO භාෂාවකට අමතරව අවම වශයෙන් දෙකෙන් එකක්වත් තිබිය යුතු අතර අනෙක් පිළිතුරු ඔබේ මුල් ප්‍රශ්නය ආවරණය කර ඇත.


6

අතුරුමුහුණත් භාවිතයෙන් තොරව පිරිසිදු, වස්තු-නැඹුරු C # කේතය සිතීම මට අපහසුය. නිශ්චිත පාදක පන්තියකින් උරුම කර ගැනීමට පන්තිවලට බල නොකර යම් ක්‍රියාකාරිත්වයක් ලබා ගැනීමට බලාත්මක කිරීමට ඔබ කැමති සෑම අවස්ථාවකම ඔබ ඒවා භාවිතා කරන අතර, මෙය ඔබේ කේතයට අදාළ (අඩු) සම්බන්ධක මට්ටමක් ලබා ගැනීමට ඉඩ දෙයි.

බහුවිධ උරුමය ලැබෙන්නේ තමන්ගේම වේදනා සමූහයක් සමඟ යැයි තර්ක කිරීමට පෙර පවා, බහු උරුමය අතුරුමුහුණත් තිබීමට වඩා හොඳ බව මම එකඟ නොවෙමි. බහුඅවයවිකතාව සහ කේත නැවත භාවිතා කිරීම සක්‍රීය කිරීම සඳහා අතුරුමුහුණත් මූලික මෙවලමකි, තවත් කෙනෙකුට අවශ්‍ය වන්නේ කුමක්ද?


5

මම පුද්ගලිකව වියුක්ත පන්තියට ආදරය කරන අතර එය අතුරු මුහුණතකට වඩා භාවිතා කරමි. ප්‍රධාන වෙනස වන්නේ .NET අතුරුමුහුණත් වන IDisposable, IEnumerable යනාදිය සමඟ ඒකාබද්ධ වීම සහ COM අන්තර් ක්‍රියාකාරීත්වය සමඟය. එසේම, අතුරුමුහුණත වියුක්ත පන්තියකට වඩා ලිවීමට ටිකක් අඩු උත්සාහයක් වන අතර පන්තියකට එක් අතුරු මුහුණතකට වඩා ක්‍රියාත්මක කළ හැකි අතර එය එක් පන්තියකින් පමණක් උරුම විය හැකිය.

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

කෙසේ වෙතත්, ඔබ සාමාන්‍යයෙන් අතුරු මුහුණතක් භාවිතා කරන්නේ ඔබට සුපිරි පන්තිය මත කිසියම් මෝස්තරයක් පැනවීමට අවශ්‍ය නොවන අතර, වියුක්ත පංතියක් භාවිතා කර නැවත භාවිතා කළ හැකි මෝස්තරයක් දැනටමත් බොහෝ දුරට ක්‍රියාත්මක කර ඇත.

System.ComponentModel නාම අවකාශය භාවිතා කරමින් ප්ලගීන පරිසරයන් ලිවීම සමඟ මම අතුරු මුහුණත් පුළුල් ලෙස භාවිතා කර ඇත්තෙමි. ඒවා සෑහෙන්න ප්‍රයෝජනවත්.


1
ඉතා හොඳින් කිවහොත්! වියුක්ත පංති පිළිබඳ මගේ ලිපියට ඔබ කැමති වනු ඇතැයි මම අනුමාන කරමි. සාරාංශය යනු සියල්ලම ය .
ස්ටීවන් ජියුරිස්

5

මට කියන්න පුළුවන් මම ඒකට සම්බන්ධයි කියලා. මම මුලින්ම OO සහ C # ගැන ඉගෙන ගැනීමට පටන් ගත් විට මටද අතුරු මුහුණත් නොලැබුණි. ඒකට කමක් නැහැ. අපට අවශ්‍ය වන්නේ අතුරුමුහුණත් වල ඇති පහසුව ඔබ අගය කරන දෙයක් හරහා ය.

මට ප්‍රවේශයන් දෙකක් උත්සාහ කිරීමට ඉඩ දෙන්න. සාමාන්‍යකරණයන් සඳහා මට සමාව දෙන්න.

1 උත්සාහ කරන්න

ඔබ ස්වදේශීය ඉංග්‍රීසි කථිකයෙක් යැයි පවසන්න. ඔබ ඉංග්‍රීසි ස්වදේශීය භාෂාව නොවන වෙනත් රටකට යන්න. ඔබට උදව් අවශ්‍යයි. ඔබට උදව් කළ හැකි කෙනෙකු ඔබට අවශ්‍යය.

ඔබ අසන්නේ: "ඒයි, ඔබ ඉපදුණේ එක්සත් ජනපදයේද?" මෙය උරුමයයි.

නැත්නම් ඔබ අහන්නේ: "ඒයි, ඔබ ඉංග්‍රීසි කතා කරනවාද"? මෙය අතුරු මුහුණතකි.

ඔබ එය කරන දේ ගැන සැලකිලිමත් වන්නේ නම්, ඔබට අතුරු මුහුණත් මත විශ්වාසය තැබිය හැකිය. ඔබ යනු කුමක්ද යන්න ගැන සැලකිලිමත් වන්නේ නම්, ඔබ උරුමය මත රඳා සිටී.

උරුමය මත රඳා සිටීම කමක් නැත. ඔබට ඉංග්‍රීසි කතා කරන, තේ වලට කැමති සහ පාපන්දු වලට කැමති කෙනෙකු අවශ්‍ය නම්, ඔබ බ්‍රිතාන්‍යයක් ඉල්ලීම වඩා හොඳය. :)

2 උත්සාහ කරන්න

හරි, අපි තවත් උදාහරණයක් උත්සාහ කරමු.

ඔබ විවිධ දත්ත සමුදායන් භාවිතා කරන අතර ඒවා සමඟ වැඩ කිරීම සඳහා වියුක්ත පන්ති ක්‍රියාත්මක කළ යුතුය. ඔබ ඔබේ පන්තිය ඩීබී වෙළෙන්දාගෙන් යම් පන්තියකට යොමු කරනු ඇත.

public abstract class SuperDatabaseHelper
{
   void Connect (string User, string Password)
}

public abstract class HiperDatabaseHelper
{
   void Connect (string Password, string User)
}

බහු උරුමයක්, ඔබ කියන්නේ? ඉහත නඩුව සමඟ එය උත්සාහ කරන්න. ඔබට බැහැ. ඔබ ඇමතීමට උත්සාහ කරන සම්බන්ධක ක්‍රමය සම්පාදකයා නොදනී.

interface ISuperDatabaseHelper
{
  void Connect (string User, string Password)
}

interface IHiperDatabaseHelper
{
   void Connect (string Password, string User)
}

දැන්, අපට වැඩ කළ හැකි යමක් තිබේ - අවම වශයෙන් C # තුළ - අපට අතුරු මුහුණත් පැහැදිලිව ක්‍රියාත්මක කළ හැකිය.

public class MyDatabaseHelper : ISuperDatabaseHelper, IHiperDatabaseHelper
{
   IHiperDataBaseHelper.Connect(string Password, string User)
   {
      //
   }

   ISuperDataBaseHelper.Connect(string User, string Password)
   {
      //
   }

}

නිගමනය

උදාහරණ හොඳම ඒවා නොවේ, නමුත් මම හිතන්නේ එයට ලක්ෂ්‍යය ලැබෙනු ඇත.

ඔබට අවශ්‍ය වන්නේ අතුරු මුහුණත් "ලබා ගැනීම" පමණි. ඔවුන් ඔබ වෙනුවෙන් නොවේ යැයි ඔබ සිතන තුරු.


පළමු උත්සාහය තමයි මගේ ඡන්දය දුන්නේ.
osundblad

1
මම මෙතැන් සිට මුළුමනින්ම ඇමරිකානු එදිරිව ඉංග්‍රීසි කථානායක ප්‍රතිසම භාවිතා කරමි. එය අපූරු ය.
බ්‍රයන් බොට්චර්

සරල ආකාරයකින් පැහැදිලි කර ඇත! නියමයි.
අමල් ඛාන්

4

ප්‍රධාන හේතු 2 ක් ඇත:

  1. බහු උරුමයක් නොමැතිකම. ඔබට එක් මූලික පන්තියකින් උරුම විය හැකි අතර ඕනෑම අතුරු මුහුණතක් ක්‍රියාත්මක කළ හැකිය. .NET හි බහු උරුමය "කිරීමට" ඇති එකම ක්‍රමය එයයි.
  2. COM අන්තර් ක්‍රියාකාරිත්වය. "පැරණි" තාක්ෂණයන් විසින් භාවිතා කිරීමට අවශ්‍ය ඕනෑම දෙයකට අතුරු මුහුණත් අර්ථ දැක්විය යුතුය.

පොයින්ට් 1 නියත වශයෙන්ම මයික්‍රොසොෆ්ට් සංවර්ධකයින් විසින්ම වර්ධනය කරන හේතුව සහ හේතුවයි
පන්කාජ් උපාධ්‍යා

1
Ank පන්ජා ඇත්ත වශයෙන්ම, ඔවුන් ජාවා වෙතින් අතුරු මුහුණත් අදහස ලබා ගත්හ (සී # හි විශේෂාංග වලින් හොඳ කොටසක් මෙන්).
ඔලිවර් වෙයිලර්

3

අතුරුමුහුණත් භාවිතා කිරීම පද්ධතිය විසන්ධි වී සිටීමට උපකාරී වන අතර එමඟින් ප්‍රතික්‍රියාකාරක, වෙනස් කිරීම් සහ නැවත යෙදවීම පහසු කරයි. එය වස්තු-නැඹුරු ඕතඩොක්ස් ක්‍රමයට ඉතා මූලික සංකල්පයක් වන අතර මම මුලින්ම ඒ ගැන දැනගත්තේ සී ++ ගුරු වරුන් "පිරිසිදු වියුක්ත පංති" සෑදූ විට ඒවා අතුරු මුහුණත් වලට බෙහෙවින් සමාන ය.


විසන්ධි කිරීම වැදගත් වන්නේ එය පද්ධතියක විවිධ කොටස් එකිනෙකාගෙන් ස්වාධීනව තබා ගන්නා බැවිනි. එක් සංරචකයක විශාල බලපෑම් වෙනස්වීම් පවා අනෙක් සංරචක වලට නොගැලපේ. ඔබේ උපයෝගිතා සමාගමට අතුරු මුහුණතක් ලෙස බල ප්ලග් ගැන සිතන්න (වෝල්ටීයතාවය සහ භෞතික අල්ෙපෙනති සහ ප්ලග් එකේ ආකෘතිය සඳහන් කිරීම). මෙම අතුරුමුහුණතට ස්තූතිවන්ත වන්නට, උපයෝගීතාවයට ඔවුන් විදුලිය නිපදවන ආකාරය සම්පූර්ණයෙන්ම වෙනස් කළ හැකිය (උදා: සූර්ය තාක්‍ෂණය භාවිතා කිරීම), නමුත් කිසිදු උපාංගයක් වෙනස් වීමට ඉඩ නොදේ.
miraculixx

3

තනිවම අතුරුමුහුණත් එතරම් ප්‍රයෝජනවත් නොවේ. නමුත් කොන්ක්‍රීට් පංති මඟින් ක්‍රියාත්මක කරන විට එය ක්‍රියාත්මක කිරීම එකක් හෝ කිහිපයක් කිරීමට ඔබට නම්‍යශීලී බවක් ලබා දෙන බව ඔබට පෙනේ. ප්‍රසාද දීමනාව නම්, අතුරු මුහුණත භාවිතා කරන වස්තුව සත්‍ය ක්‍රියාත්මක කිරීම පිළිබඳ විස්තර දැන ගැනීමට අවශ්‍ය නොවීමයි - එය සංකේතකරණය ලෙස හැඳින්වේ.


2

ඒවා නැවත භාවිතා කරන්නේ කේත නැවත භාවිතා කිරීම සඳහා ය. ඔබ අතුරුමුහුණතට කේත කළහොත් ඔබට එම අතුරුමුහුණතෙන් උරුම වන විවිධ පන්තියක් භාවිතා කළ හැකි අතර සියල්ල බිඳ දැමිය නොහැක.

වෙබ් සේවා වලදී ඒවා ඉතා ප්‍රයෝජනවත් වේ. එහිදී ඔබට පන්තියක් කරන්නේ කුමක්ද යන්න සේවාදායකයාට දැන ගැනීමට අවශ්‍ය වේ (එබැවින් ඔවුන්ට එය පරිභෝජනය කළ හැකිය) නමුත් ඔවුන්ට නියම කේතය ලබා දීමට අවශ්‍ය නැත.


2

තරුණ ක්‍රමලේඛකයෙකු / සංවර්ධකයෙකු ලෙස, C # ඉගෙනීමෙන් ඔබට අතුරු මුහුණතේ ඇති ප්‍රයෝජන නොපෙනේ, මන්ද ඔබේ පන්ති භාවිතයෙන් ඔබේ කේත ලිවිය හැකි අතර කේතය හොඳින් ක්‍රියාත්මක වේ, නමුත් සැබෑ ජීවිතයේ දී, පරිමාණ කළ හැකි, ශක්තිමත් සහ නඩත්තු කළ හැකි යෙදුමක් තැනීම ඇතුළත් වේ. සමහර වාස්තු විද්‍යාත්මක හා රටා, අතුරු මුහුණත භාවිතා කිරීමෙන් පමණක් කළ හැකි, උදාහරණයක් ලෙස යැපුම් එන්නත් කිරීම.


1

සැබෑ ලෝක ක්‍රියාත්මක කිරීම:

ඔබට වස්තුවක් අතුරුමුහුණත් වර්ගය ලෙස දැමිය හැකිය:

IHelper h = (IHelper)o;
h.HelperMethod();

ඔබට අතුරු මුහුණතක ලැයිස්තුවක් සෑදිය හැකිය

List<IHelper> HelperList = new List<IHelper>();

මෙම වස්තූන් සමඟ ඔබට ඕනෑම අතුරු මුහුණත් ක්‍රම හෝ ගුණාංග වෙත පිවිසිය හැකිය. මේ ආකාරයෙන් ඔබට වැඩසටහනක කොටසක් සඳහා අතුරු මුහුණතක් අර්ථ දැක්විය හැකිය. ඒ වටා තර්කනය ගොඩනඟන්න. එවිට වෙනත් කෙනෙකුට ඔවුන්ගේ ව්‍යාපාර වස්තු තුළ ඔබේ අතුරු මුහුණත ක්‍රියාත්මක කළ හැකිය. BO හි වෙනස නම් ඔවුන්ට අතුරු මුහුණත් සඳහා වන තර්කනය වෙනස් කළ හැකි අතර ඔබේ කොටස සඳහා තර්කනයේ වෙනසක් අවශ්‍ය නොවේ.


0

ඔබේ පද්ධතිය ලබා දෙන ඇතැම් පණිවිඩ තේරුම් ගැනීමට (සහ දායක වීමට) පන්ති සඳහා යාන්ත්‍රණයක් ලබා දීමෙන් අතුරු මුහුණත් ප්ලගීන විලාසිතාවේ මොඩියුලරිටි සඳහා ණය ලබා දේ. මම විස්තාරනය කරන්නම්.

ඔබගේ යෙදුමේදී, ඔබ තීරණය කරන්නේ පෝරමයක් පටවන විට හෝ නැවත පූරණය වන සෑම අවස්ථාවකම එය සත්කාරකත්වය ඉවත් කිරීමට අවශ්‍ය බවය. ඔබ IClearක්‍රියාත්මක කරන අතුරු මුහුණතක් අර්ථ දක්වයි Clear. මීට අමතරව, පරිශීලකයා සුරැකීමේ බොත්තම එබූ සෑම විටම පෝරමය එහි තත්වය දිගටම පවත්වා ගැනීමට උත්සාහ කළ යුතු බව ඔබ තීරණය කරයි. මේ අනුව, පිළිපදින සෑම දෙයකටම ISaveඑහි තත්වය දිගටම පවත්වා ගැනීමට පණිවිඩයක් ලැබේ. ඇත්ත වශයෙන්ම, ප්‍රායෝගිකව කිවහොත්, බොහෝ අතුරුමුහුණත් පණිවිඩ කිහිපයක් හසුරුවයි.

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

බොහෝ භාෂාවල අතුරු මුහුණතක් අනුගමනය කරන දේවල් විමසීමට යාන්ත්‍රණ ( LINQ වැනි ) ඇත. මෙය සාමාන්‍යයෙන් කොන්දේසි සහිත තර්කනය තුරන් කිරීමට ඔබට උපකාරී වනු ඇත, මන්ද ඔබට සමාන දේ (එකම උරුම දාමයෙන් උපුටා ගැනීම අවශ්‍ය නොවන) ඒ හා සමානව හැසිරෙන ආකාරය (විශේෂිත පණිවිඩයකට අනුව) ඔබට පැවසීමට අවශ්‍ය නොවන බැවිනි. ඒ වෙනුවට, ඔබ යම් පණිවිඩයක් තේරුම් ගන්නා සෑම දෙයක්ම රැස් කර (අතුරු මුහුණතක් අනුගමනය කරයි) පණිවිඩය ප්‍රකාශයට පත් කරන්න.

උදාහරණයක් ලෙස, ඔබට ආදේශ කළ හැකිය ...

Me.PublishDate.Clear()
Me.Subject.Clear()
Me.Body.Clear()

...සමග:

For Each ctl As IClear In Me.Controls.OfType(Of IClear)()
    ctl.Clear()
Next

එය effectively ලදායී ලෙස බොහෝ දේ ලෙස පෙනේ:

ඇහුම්කන් දෙන්න, සවන් දෙන්න! නිශ්කාෂණය තේරුම් ගන්නා සෑම කෙනෙකුම කරුණාකරලා Clear!

මේ ආකාරයෙන්, අපට සෑම දෙයක්ම නිරවුල් කර ගැනීමට පැවසීමෙන් වැළකී සිටිය හැකිය. අනාගතයේදී පැහැදිලි කළ හැකි අයිතම එකතු කළ විට ඒවා අතිරේක කේතයකින් තොරව ප්‍රතිචාර දක්වයි.


0

පහත දැක්වෙන්නේ ව්‍යාජ කේතයයි:

class MyClass{

    private MyInterface = new MyInterfaceImplementationB();

    // Code using Thingy 

}

interface MyInterface{

    myMethod();

}

class MyInterfaceImplementationA{ myMethod(){ // method implementation A } }

class MyInterfaceImplementationB{ myMethod(){ // method implementation B } }

class MyInterfaceImplementationC{ myMethod(){ // method implementation C } }

අවසාන පන්ති සම්පූර්ණයෙන්ම වෙනස් ක්‍රියාත්මක කිරීම් විය හැකිය.

බහුවිධ උරුමයක් ලබා ගත නොහැකි නම්, උරුමය මගින් මව් පංතිය ක්‍රියාවට නැංවීම මඟින් දේවල් වඩාත් දෘඩ වේ. අනෙක් අතට අතුරුමුහුණත් වලට එරෙහිව ක්‍රමලේඛනය කිරීමෙන් ඔබේ කේතය හෝ රාමුවක් අතිශයින් නම්‍යශීලී විය හැකිය. ඔබ කවදා හෝ උරුම උරුම දාමයක් තුළ පන්ති මාරු කළ හැකි යැයි ඔබ සිතූ නඩුවකට ඔබ පැමිණියේ නම්, ඒ මන්දැයි ඔබට වැටහෙනු ඇත.

නිදසුනක් ලෙස, තැටියෙන් දත්ත කියවීමට මුලින් අදහස් කළ පා er කයෙකුට ලබා දෙන රාමුවක් එකම ස්වභාවයකින් නමුත් සම්පූර්ණයෙන්ම වෙනස් ආකාරයකින් කිරීමට නැවත ක්‍රියාත්මක කළ හැකිය. උදාහරණයක් ලෙස මෝර්ස් කේතය අර්ථ නිරූපණය කරන්න.

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.