වියුක්ත ශ්‍රිතයක් සහ අථත්‍ය ශ්‍රිතයක් අතර වෙනස කුමක්ද?


1580

වියුක්ත ශ්‍රිතයක් සහ අථත්‍ය ශ්‍රිතයක් අතර වෙනස කුමක්ද? අථත්ය හෝ වියුක්ත භාවිතා කිරීම නිර්දේශ කරනු ලබන්නේ කුමන අවස්ථා වලදී ද? හොඳම ප්‍රවේශය කුමක්ද?


271
අථත්‍ය ශ්‍රිතයක් අභිබවා යා හැකි අතර වියුක්ත ශ්‍රිතයක් අභිබවා යා යුතුය.
ජෝර්දාන් පාර්මර්

15
අතථ්‍ය ශ්‍රිතයන්ට මූලික පන්තියේ පෙරනිමි / සාමාන්‍ය ක්‍රියාත්මක කිරීමක් තිබිය හැකිය.
මාටින්

5
මෙහි ප්‍රධාන වචනය වියුක්ත ය ; ඒවා නොපවතින අතර ශ්‍රිතය යනු කුමක්ද යන්න පිළිබඳ නොපැහැදිලි අදහසක් පමණි (ක්‍රම අත්සන)
කෝල් ජොන්සන්

Answers:


2744

වියුක්ත ශ්‍රිතයකට ක්‍රියාකාරීත්වය තිබිය නොහැක. ඔබ මූලිකවම කියන්නේ, ඕනෑම ළමා පන්තියක් මෙම ක්‍රමයේ තමන්ගේම අනුවාදයක් ලබා දිය යුතුය, කෙසේ වෙතත් මව් පන්තියේ ක්‍රියාත්මක කිරීමට පවා උත්සාහ කිරීම සාමාන්‍ය දෙයකි.

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


399
හා එක් එක් පාඨමාලාව, ඔබ, අථත්ය ක්රමය ඉක්මවා යැමට නම්, ඔබ හැම විටම මව් ක්රමය base.Foo (...) ඇමතීම මගින් යොමු කළ හැකි
Brann

198
ස්තූතියි. මෙය එම්එස්ඩීඑන් ප්‍රලේඛනයේ ඇති ඕනෑම දෙයකට වඩා හොඳ සහ පහසු පැහැදිලි කිරීමකි. (මෙය කියවා විනාඩි පහකට පසු මට හිසරදයක් ඇති විය: msdn.microsoft.com/en-us/library/aa645767(v=vs.71).aspx )
ජේක්

16
ජාවා සිට පැමිණෙන විට, මම මෙය කියවන තෙක් එය කිසිසේත් අථත්‍ය කිරීමට අවශ්‍ය වන්නේ මන්දැයි මම තරමක් ව්‍යාකූල වී සිටියෙමි: stackoverflow.com/a/1062126/193634
රොස්ඩි කාසිම්

4
EMeqDotNet එයින් අදහස් වන්නේ ඔබ මට වඩා හොඳින් ලියන්නේ නැතිනම් මගේ ක්‍රියාවට නැංවීමට ඔබ කැමති නම් :)
උස්මාන් යූනාස්

16
මෙය මයික්‍රොසොෆ්ට් විමර්ශන පුස්තකාලයේ තිබිය යුතු අතර මම විනාඩි 10 ක් කියවා තවමත් ව්‍යාකූල වී සිටිමි.
සැම්චෙන්

303

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

අතථ්‍ය ශ්‍රිතයක් පෙරනිමි ක්‍රියාත්මක කිරීමක් සපයන අතර එය වියුක්ත පන්තියක හෝ වියුක්ත නොවන පන්තියක පැවතිය හැකිය.

උදාහරණයක් ලෙස:

public abstract class myBase
{
    //If you derive from this class you must implement this method. notice we have no method body here either
    public abstract void YouMustImplement();

    //If you derive from this class you can change the behavior but are not required to
    public virtual void YouCanOverride()
    { 
    }
}

public class MyBase
{
   //This will not compile because you cannot have an abstract method in a non-abstract class
    public abstract void YouMustImplement();
}

29
නියැදි කේතය බැලීමට ඉතා ප්‍රයෝජනවත් වේ - පිළිතුරු වල විවිධ පැහැදිලි කිරීම් වඩාත් පැහැදිලි කිරීමට උපකාරී වේ.
සයිමන් ටෙව්සි

2
මම පෙර අනුවාදයට පිළිතුර ආපසු හරවා යැව්වෙමි: පංති දෙක උදාහරණ පමණි, පළමු පන්තිය සම්පාදනය කරනුයේ එය වියුක්ත ලෙස සලකුණු කර ඇති හෙයිනි, දෙවනුව එසේ නොවේ. MyBase වෙනත් පන්තියකින් උරුම වී තිබේද නැද්ද යන්න අදාළ නොවේ.
ඩර්ක්

2
ඔබේ MyBaseපන්තියට කෙසේ හෝ වියුක්ත පන්තිය ක්‍රියාත්මක කළ යුතු නොවේද? මම මෙය බොහෝ විට නොකරමි, එබැවින් මා වරදවා වටහා ගත හැකිය. ඔබේ උදාහරණයෙන් මම එය නොදකිමි.
jp2code

2
ඉහත උදාහරණයේ MyBase මඟින් ඔබට කළ නොහැකි දේ පෙන්වයි. එනම් ඔබට වියුක්ත නොවන පන්තියක වියුක්ත ක්‍රමයක් තිබිය නොහැක
ජොෂ්බර්ක්

80
  1. සාමාජිකයන් abstractසිටිය හැක්කේ පන්තිවලට පමණි abstract.
  2. ඒ නොවන abstractපන්තිය සිට අනුන බව abstractපන්තිය කල යුතු override එහි abstractසාමාජිකයන්.
  3. abstractසාමාජික නිසැකයෙන්ම වේ virtual.
  4. abstractසාමාජික (ඕනෑම ක්රියාත්මක කිරීම ලබා දිය නොහැකි abstractලෙස හැඳින්වේ pure virtualසමහර භාෂාවල).

අංක 3 මට තේරුමක් නැත. මම හිතන්නේ ඔබ අදහස් කළේ "වියුක්ත පංතියක සාමාජිකයෙකු ව්‍යංගයෙන් අථත්ය" (එනම්, එය අථත්ය බව සඳහන් නොකර ඔබට ඒ සඳහා ක්රියාකාරිත්වය සැපයිය හැකිය).
හොබෝ ස්පයිඩර්

5
නැත, මා අදහස් කළේ මා ලියූ දෙයයි. වියුක්ත පන්තියේ සාමාජිකයෙකු විය හැකි virtualනොවන හෝ virtual. ක abstractසාමාජික (එනම් වියුක්ත දේපල, වියුක්ත ක්රමය) ඔබ එය පෙරනිමි ක්රියාත්මක කිරීම ම රැගෙන නොවන බව හැර, එය පරයා එනම්, හුදෙක් අතාත්වික ක්රමය වගේ.
මෙහර්දාඩ් අෆ්ෂාරි

උපුටා ගත් "වියුක්ත සාමාජිකයා" ව්‍යංගයෙන් "අථත්ය" වේ. නමුත් මම කොතැනක හෝ දුටුවෙමි, යමෙකු "අතථ්‍ය" මූල පදය පැහැදිලිව එකතු කිරීමෙන් වියුක්ත සාමාජිකයින් නිර්මාණය කර ඇත. ඔබගේ පිළිතුර කියවන තෙක් එය මට සැකයක් ඇති කළේය.
bonCodigo

කරුණාකර 4 වන කරුණ සඳහා සහය දැක්වීම් ඇතුළත් කරන්න. තවද ඔබගේ පෝස්ට් මඟින් කලින් සඳහන් කළ වෙනත් කිසිවක් ගෙන එන්නේ නැත.
රෆායෙල්

මෙය හුදෙක් පැහැදිලි කිරීම් නොමැති ප්‍රකාශ සමූහයකි.
ප්‍රතිලෝම ඉංජිනේරු

61

ඔබ සැමවිටම වියුක්ත ශ්‍රිතයක් අභිබවා යා යුතුය.

මේ අනුව:

  • වියුක්ත කාර්යයන් - උරුමකරු විසින් එය ක්‍රියාත්මක කළ යුතු විට
  • අතථ්‍ය - තීරණය කිරීම උරුමකරුට පැවරෙන විට

37

වියුක්ත කාර්යය:

  1. එය ප්‍රකාශ කළ හැක්කේ වියුක්ත පන්තිය තුළ පමණි.
  2. එහි අඩංගු වන්නේ වියුක්ත පන්තියේ ක්‍රියාත්මක කිරීම නොව ක්‍රම ප්‍රකාශය පමණි.
  3. ව්‍යුත්පන්න පන්තියේදී එය අභිබවා යා යුතුය.

අතථ්‍ය ක්‍රියාකාරිත්වය:

  1. එය වියුක්ත මෙන්ම වියුක්ත නොවන පන්තිය තුළ ප්‍රකාශ කළ හැකිය.
  2. එය ක්රමය ක්රියාත්මක කිරීම අඩංගු වේ.
  3. එය ඉක්මවා යා හැක.

29

වියුක්ත ක්‍රමය: පන්තියක වියුක්ත ක්‍රමයක් ඇති විට, එම පන්තිය වියුක්ත ලෙස ප්‍රකාශ කළ යුතුය. වියුක්ත ක්‍රමයට කිසිදු ක්‍රියාත්මක කිරීමක් නොමැති අතර එම නිසා එම වියුක්ත පන්තියෙන් ව්‍යුත්පන්න වූ පන්ති මෙම වියුක්ත ක්‍රමය සඳහා ක්‍රියාත්මක කිරීමක් සැපයිය යුතුය.

අතථ්‍ය ක්‍රමය: පන්තියකට අථත්‍ය ක්‍රමයක් තිබිය හැකිය. අතථ්‍ය ක්‍රමයට ක්‍රියාත්මක කිරීමක් ඇත. ඔබ අථත්ය ක්රමය ඇති බව පන්ති සිට උරුම වූ විට, ඔබ හැකි අතථ්ය ක්රමය යටපත් කිරීම සහ අමතර තර්ක ලබා, හෝ ඔබේ ම ක්රියාත්මක කිරීම සමග තර්ක වෙනුවට.

කුමක් භාවිතා කළ යුතුද: සමහර අවස්ථාවලදී, ඇතැම් වර්ග වලට නිශ්චිත ක්‍රමවේදයක් තිබිය යුතු බව ඔබ දනී, නමුත්, මෙම ක්‍රමය ක්‍රියාත්මක කළ යුත්තේ කුමක් දැයි ඔබ නොදනී.
එවැනි අවස්ථාවන්හිදී, ඔබට මෙම අත්සන සහිත ක්‍රමයක් අඩංගු අතුරු මුහුණතක් නිර්මාණය කළ හැකිය. කෙසේ වෙතත්, ඔබට එවැනි අවස්ථාවක් තිබේ නම්, නමුත් එම අතුරුමුහුණත ක්‍රියාත්මක කරන්නන්ට තවත් පොදු ක්‍රමයක් ඇති බව ඔබ දනී (ඒ සඳහා ඔබට දැනටමත් ක්‍රියාත්මක කිරීම සැපයිය හැකිය), ඔබට වියුක්ත පන්තියක් නිර්මාණය කළ හැකිය. මෙම වියුක්ත පංතියේ පසුව වියුක්ත ක්‍රමය (එය ඉක්මවා යා යුතුය) සහ 'පොදු' තර්කනය අඩංගු තවත් ක්‍රමයක් අඩංගු වේ.

ඔබට සෘජුවම භාවිතා කළ හැකි පංතියක් තිබේ නම් අථත්ය ක්රමයක් භාවිතා කළ යුතුය, නමුත් ඔබට අනිවාර්යයෙන්ම උරුමකරුවන්ට යම් හැසිරීමක් වෙනස් කිරීමට හැකි විය යුතුය.


29

පැහැදිලි කිරීම: ප්‍රතිසම සමඟ. එය ඔබට උපකාරී වනු ඇතැයි බලාපොරොත්තු වෙමු.

සන්දර්භය

මම ගොඩනැගිල්ලක 21 වන මහලේ වැඩ කරනවා. මම ගින්න ගැන ව්‍යාකූලයි. ලෝකයේ කොහේ හෝ තැනක ගින්නක් අහස සීරීමට ලක් වේ. නමුත් වාසනාවකට මෙන් ගින්නක් ඇති විට කුමක් කළ යුතුද යන්න පිළිබඳ උපදෙස් අත්පොතක් මෙහි කොතැනක හෝ තිබේ:

FireEscape ()

  1. බඩු එකතු කරන්න එපා
  2. ගින්නෙන් බේරීමට ඇවිදින්න
  3. ගොඩනැගිල්ලෙන් පිටතට යන්න

මෙය මූලික වශයෙන් FireEscape () නමින් අථත්‍ය ක්‍රමයකි

අතථ්‍ය ක්‍රමය

මෙම සැලැස්ම 99% තත්වයන් සඳහා ඉතා හොඳයි. එය ක්‍රියාත්මක වන මූලික සැලැස්මකි. නමුත් ගින්නෙන් ගැලවීම අවහිර වීමට හෝ හානිවීමට 1% ක අවස්ථාවක් තිබේ, එම අවස්ථාවේදී ඔබ සම්පූර්ණයෙන්ම ඉස්කුරුප්පු කර ඇති අතර ඔබ දැඩි ක්‍රියාමාර්ගයක් නොගතහොත් ඔබ සව්දිය බවට පත්වේ. අතථ්‍ය ක්‍රම මඟින් ඔබට එය කළ හැකිය: ඔබට ඔබේම සැලැස්මේ අනුවාදය සමඟ මූලික FireEscape () සැලැස්ම අභිබවා යා හැකිය:

  1. කවුළුව වෙත ධාවනය කරන්න
  2. ජනේලයෙන් පනින්න
  3. පැරෂුට් ආරක්ෂිතව පහළට

වෙනත් වචන වලින් කිවහොත්, අථත්ය ක්රම මගින් මූලික සැලැස්මක් සපයන අතර, ඔබට අවශ්ය නම් එය අභිබවා යා හැකිය . ක්‍රමලේඛකයා සුදුසු යැයි සිතන්නේ නම් උප පංතිවලට මව් පන්තියේ අථත්‍ය ක්‍රමය අභිබවා යා හැකිය.

වියුක්ත ක්‍රම

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

වෙනත් වචන වලින් කිවහොත්, සෑම පුද්ගලයෙකුටම තමන්ගේම FireEscape () ක්‍රමයක් සංවර්ධනය කිරීමට බල කෙරෙයි . එක මිනිහෙක් ගින්නෙන් බේරෙනවා. තවත් පිරිමි ළමයෙක් පැරෂුට් කරයි. තවත් පිරිමි ළමයෙක් ගොඩනැගිල්ලෙන් ඉවතට පියාසර කිරීම සඳහා රොකට් ප්‍රචාලන තාක්ෂණය භාවිතා කරනු ඇත. තවත් පිරිමි ළමයෙක් එළියට එයි. ඔබ මූලික ෆයර් එස්කේප් () සැලැස්මක් ඇති තාක් කල් ඔබ පැන යන්නේ කෙසේදැයි කළමනාකාරිත්වය ගණන් ගන්නේ නැත - ඒවා ඔබට සහතික කළ නොහැකි නම් ගඩොල් ටොන් එකක් මෙන් ඕඑච්එස් සංවිධානය මතට පැමිණෙනු ඇත. වියුක්ත ක්‍රමයකින් අදහස් කරන්නේ මෙයයි.

නැවතත් දෙදෙනා අතර ඇති වෙනස කුමක්ද?

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

දැන් එය එතරම් අපහසු නොවීය.


22

වියුක්ත ක්‍රමයක් යනු කොන්ක්‍රීට් පන්තියක් සෑදීම සඳහා ක්‍රියාත්මක කළ යුතු ක්‍රමයකි. ප්‍රකාශය වියුක්ත පන්තියේ (සහ වියුක්ත ක්‍රමයක් ඇති ඕනෑම පන්තියක් වියුක්ත පන්තියක් විය යුතුය) එය කොන්ක්‍රීට් පන්තියක ක්‍රියාත්මක කළ යුතුය.

අථත්ය ක්රමයක් යනු සුපිරි පන්තියේ හැසිරීම ප්රතිස්ථාපනය කරමින් උඩින් භාවිතා කරමින් ව්යුත්පන්න පන්තියක අභිබවා යා හැකි ක්රමයකි . ඔබ ඉක්මවා නොගියහොත්, ඔබට මුල් හැසිරීම ලැබේ. ඔබ එසේ කරන්නේ නම්, ඔබ සැමවිටම නව හැසිරීම ලබා ගනී. මෙය අථත්‍ය ක්‍රමවලට පටහැනි වන අතර එය අභිබවා යා නොහැකි නමුත් මුල් ක්‍රමය සැඟවිය හැක. මෙය සිදු කරනුයේ newවිකරණකාරකය භාවිතා කරමිනි .

පහත උදාහරණය බලන්න:

public class BaseClass
{
    public void SayHello()
    {
        Console.WriteLine("Hello");
    }


    public virtual void SayGoodbye()
    {
        Console.WriteLine("Goodbye");
    }

    public void HelloGoodbye()
    {
        this.SayHello();
        this.SayGoodbye();
    }
}


public class DerivedClass : BaseClass
{
    public new void SayHello()
    {
        Console.WriteLine("Hi There");
    }


    public override void SayGoodbye()
    {
        Console.WriteLine("See you later");
    }
}

මම ක්ෂණිකව DerivedClassඇමතූ SayHelloවිට හෝ SayGoodbyeමට "හායි දෙර්" සහ "පසුව හමුවෙමු". මම කතා කළහොත් මට HelloGoodbye"හෙලෝ" සහ "පසුව හමුවෙමු". මෙයට හේතුව SayGoodbyeඅතථ්‍ය වන අතර එය ව්‍යුත්පන්න පංති මගින් ප්‍රතිස්ථාපනය කළ හැකිය. SayHelloඑය සැඟවී ඇත, එබැවින් මගේ මූලික පන්තියෙන් මා එය අමතන විට මගේ මුල් ක්‍රමය ලබා ගනී.

වියුක්ත ක්‍රම ව්‍යංගයෙන් අථත්‍යය. අතුරු මුහුණතක් මෙන්, තිබිය යුතු හැසිරීම ඔවුන් අර්ථ දක්වයි.


9

වියුක්ත ක්‍රම සෑම විටම අතථ්‍ය වේ. ඔවුන්ට ක්‍රියාත්මක කිරීමක් කළ නොහැක.

ප්රධාන වෙනස එයයි.

මූලික වශයෙන්, ඔබ එය 'පෙරනිමි' ක්‍රියාත්මක කර ඇත්නම් සහ එහි හැසිරීම වෙනස් කිරීමට පරම්පරාවට ඉඩ දීමට අවශ්‍ය නම් ඔබ අතථ්‍ය ක්‍රමයක් භාවිතා කරනු ඇත.

වියුක්ත ක්‍රමයක් සමඟ, ඔබ ක්‍රියාත්මක කිරීමට සැපයීමට පරම්පරාවට බල කරයි.


9

පහත දැක්වෙන පංතිවල (වෙනත් පිළිතුරු වලින්) වැඩි දියුණු කිරීම් කිරීමෙන් මම මෙය සරල කළෙමි:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestOO
{
    class Program
    {
        static void Main(string[] args)
        {
            BaseClass _base = new BaseClass();
            Console.WriteLine("Calling virtual method directly");
            _base.SayHello();
            Console.WriteLine("Calling single method directly");
            _base.SayGoodbye();

            DerivedClass _derived = new DerivedClass();
            Console.WriteLine("Calling new method from derived class");
            _derived.SayHello();
            Console.WriteLine("Calling overrided method from derived class");
            _derived.SayGoodbye();

            DerivedClass2 _derived2 = new DerivedClass2();
            Console.WriteLine("Calling new method from derived2 class");
            _derived2.SayHello();
            Console.WriteLine("Calling overrided method from derived2 class");
            _derived2.SayGoodbye();
            Console.ReadLine();
        }
    }


    public class BaseClass
    {
        public void SayHello()
        {
            Console.WriteLine("Hello\n");
        }
        public virtual void SayGoodbye()
        {
            Console.WriteLine("Goodbye\n");
        }

        public void HelloGoodbye()
        {
            this.SayHello();
            this.SayGoodbye();
        }
    }


    public abstract class AbstractClass
    {
        public void SayHello()
        {
            Console.WriteLine("Hello\n");
        }


        //public virtual void SayGoodbye()
        //{
        //    Console.WriteLine("Goodbye\n");
        //}
        public abstract void SayGoodbye();
    }


    public class DerivedClass : BaseClass
    {
        public new void SayHello()
        {
            Console.WriteLine("Hi There");
        }

        public override void SayGoodbye()
        {
            Console.WriteLine("See you later");
        }
    }

    public class DerivedClass2 : AbstractClass
    {
        public new void SayHello()
        {
            Console.WriteLine("Hi There");
        }
        // We should use the override keyword with abstract types
        //public new void SayGoodbye()
        //{
        //    Console.WriteLine("See you later2");
        //}
        public override void SayGoodbye()
        {
            Console.WriteLine("See you later");
        }
    }
}

6

බන්ධනය යනු කේත ඒකකයකට නමක් සිතියම් ගත කිරීමේ ක්‍රියාවලියයි.

ප්‍රමාද බන්ධනය යනු අප නම භාවිතා කරන නමුත් සිතියම්කරණය කල් දැමීමයි. වෙනත් වචන වලින් කිවහොත්, අපි පළමුව නම නිර්මාණය කරමු / සඳහන් කරමු, පසුව යම් ක්‍රියාවලියක් එම නමට කේත සිතියම් ගත කිරීමට ඉඩ දෙමු.

දැන් සලකා බලන්න:

  • මිනිසුන් හා සසඳන විට යන්ත්‍ර සෙවීම හා වර්ග කිරීම ඉතා හොඳයි
  • යන්ත්‍ර හා සසඳන විට මිනිසුන් නව නිපැයුම් හා නව්‍යකරණයන්හි දක්ෂය

ඉතින්, කෙටි පිළිතුර නම්: virtualයන්ත්‍රය සඳහා ප්‍රමාද බන්ධන උපදෙස් (ධාවන කාලය) වන අතර abstractමිනිසා (ක්‍රමලේඛකයා) සඳහා ප්‍රමාද බන්ධන උපදෙස් වේ.

වෙනත් වචන වලින් කිවහොත්, virtualමෙයින් අදහස් වන්නේ:

“හිතවත් ධාවන වේලාව , ඔබ කළ හැකි හොඳම දේ කිරීමෙන් මෙම නමට සුදුසු කේතය බැඳ තබන්න: සෙවීම

ෙකෙසේෙවතත් abstract:

“හිතවත් ක්‍රමලේඛකයා , කරුණාකර ඔබ කළ හැකි හොඳම දේ කිරීමෙන් මෙම නමට සුදුසු කේතය බැඳ තබන්න: නව නිපැයුම

සම්පූර්ණත්වය සඳහා, අධි බර පැටවීම යන්නෙන් අදහස් වන්නේ:

“හිතවත් සම්පාදකයා , ඔබ කළ හැකි හොඳම දේ කිරීමෙන් මෙම නමට සුදුසු කේතය බැඳ තබන්න: වර්ග කිරීම ”.


3

උරුමකරුවන්ට අවශ්‍ය නම් ක්‍රියාකාරීත්වය දීර් extend කිරීමට ඔබට අවශ්‍ය වූ විට ඔබ මූලික වශයෙන් අථත්‍ය ක්‍රමයක් භාවිතා කරයි.

උරුමකරුවන්ට ක්‍රියාකාරීත්වය ක්‍රියාත්මක කිරීමට අවශ්‍ය විට ඔබ වියුක්ත ක්‍රම භාවිතා කරයි (මේ අවස්ථාවේ දී ඔවුන්ට වෙනත් විකල්පයක් නොමැත)


3

අතථ්‍ය ක්‍රමය :

  • අතථ්‍ය යන්නෙන් අදහස් කරන්නේ අපට එය ඉක්මවා යා හැකි බවයි.

  • අතථ්‍ය ශ්‍රිතය ක්‍රියාත්මක කිරීමක් ඇත. අපට පංතිය උරුම වූ විට අපට අථත්‍ය ශ්‍රිතය අභිබවා අපගේම තර්කනය සැපයිය හැකිය.


  • ළමා පන්තියේ ක්‍රියාකාරිත්වය ක්‍රියාත්මක කිරීමේදී අපට වර්චුවල් ශ්‍රිතයේ ආපසු වර්ගය වෙනස් කළ හැකිය (එය
    සෙවනැලි සංකල්පයක් ලෙස පැවසිය හැකිය).

වියුක්ත ක්‍රමය

  • සාරාංශය යනු අප එය ඉක්මවා යා යුතු බවයි.

  • වියුක්ත ශ්‍රිතයක් ක්‍රියාත්මක කිරීමක් නොමැති අතර එය වියුක්ත පන්තියක තිබිය යුතුය.

  • එය ප්‍රකාශ කළ හැක්කේ එය පමණි. මෙය ව්‍යුත්පන්න පන්තියට එය ක්‍රියාත්මක කිරීමට බල කරයි.

  • වියුක්ත සාමාජිකයෙකු ව්‍යංගයෙන් අථත්ය වේ. වියුක්තය සමහර භාෂාවල පිරිසිදු අථත්‍යය ලෙස හැඳින්විය හැකිය.

    public abstract class BaseClass
    { 
        protected abstract void xAbstractMethod();
    
        public virtual void xVirtualMethod()
        {
            var x = 3 + 4;
        }
    } 
    

2

සමහර ස්ථානවල වියුක්ත ක්‍රමය පහත පරිදි අර්ථ දක්වා ඇත. **

"වියුක්ත ක්‍රමයක් ළමා පන්තියේ ක්‍රියාත්මක කළ යුතුය"

** මට දැනුනා එය හරියට වගේ.

ළමා පන්තිය ද වියුක්ත නම්, ළමා පන්තියක වියුක්ත ක්‍රමයක් ක්‍රියාත්මක කිරීම අවශ්‍ය නොවේ ..

1) වියුක්ත ක්රමය එක්කුත් පෞද්ගලික ක්රමය විය. 2) වියුක්ත ක්රමය එක්කුත් එම වියුක්ත පන්තියේ ක්රියාත්මක කළ යුතුය.

මම කියන්නේ .. අපි වියුක්ත පංතියක් ක්‍රියාත්මක කරන්නේ නම්, ඔබට වියුක්ත ක්‍රම මූලික සාරාංශ පන්තියෙන් අභිබවා යා යුතුය. මක්නිසාද යත්, වියුක්ත ක්‍රමය ක්‍රියාත්මක කිරීම අතිච්ඡාදනය වන ප්‍රධාන වචනය සමඟ ය .එම අථත්‍ය ක්‍රමයට සමාන ය.

උරුම වූ පන්තියක අථත්‍ය ක්‍රමයක් ක්‍රියාත්මක කිරීම අවශ්‍ය නොවේ.

                                 ----------CODE--------------

public abstract class BaseClass
{
    public int MyProperty { get; set; }
    protected abstract void MyAbstractMethod();

    public virtual void MyVirtualMethod()
    {
        var x = 3 + 4;
    }

}
public abstract class myClassA : BaseClass
{
    public int MyProperty { get; set; }
    //not necessary to implement an abstract method if the child class is also abstract.

    protected override void MyAbstractMethod()
    {
        throw new NotImplementedException();
    }
}
public class myClassB : BaseClass
{
    public int MyProperty { get; set; }
    //You must have to implement the abstract method since this class is not an abstract class.

    protected override void MyAbstractMethod()
    {
        throw new NotImplementedException();
    }
}

2

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

සරල පැහැදිලි කිරීම - ප්‍රතිසම භාවිතා කරමින් පැහැදිලි කිරීම

වියුක්ත ක්‍රමය

ජෝර්ජ් ඩබ්ලිව් බුෂ් ගැන සිතන්න. ඔහු තම සොල්දාදුවන්ට මෙසේ කියයි: "ඉරාකයේ සටන් කරන්න". ඒක තමයි. ඔහු නිශ්චිතව දක්වා ඇත්තේ සටන් කළ යුතු බවයි. එය හරියටම සිදුවන්නේ කෙසේදැයි ඔහු සඳහන් නොකරයි . නමුත් මම කිව්වේ, ඔබට පිටතට ගොස් "සටන්" කළ නොහැක: එයින් හරියටම අදහස් කරන්නේ කුමක්ද? මම බී -52 හෝ මගේ ව්‍යුත්පන්නය සමඟ සටන් කරනවාද? එම නිශ්චිත තොරතුරු වෙනත් කෙනෙකුට ඉතිරි වේ. මෙය වියුක්ත ක්‍රමයකි.

අතථ්‍ය ක්‍රමය

ඩේවිඩ් පෙට්රියස් හමුදාවේ ඉහළ මට්ටමක සිටී. සටන යන්නෙන් අදහස් කරන්නේ කුමක්ද යන්න ඔහු නිර්වචනය කර ඇත:

  1. සතුරා සොයා ගන්න
  2. ඔහුව උදාසීන කරන්න.
  3. පසුව බියර් පානය කරන්න

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

පුද්ගලික රැකියා බ්ලොග් පෙට්රියස්ගේ නියෝගය කියවන අතර ඔහුගේ විශේෂ අවශ්‍යතා අනුව ඔහුගේම සටන් අනුවාදයක් ක්‍රියාත්මක කිරීමට අවසර දෙනු ලැබේ:

  1. සතුරා සොයා ගන්න.
  2. ඔහුට හිසට වෙඩි තියන්න.
  3. ගෙදර යන්න
  4. බියර් ගන්න.

නූරි අල් මලිකි ද පෙට්රියස්ගෙන් එම නියෝග ලබා ගනී. ඔහුත් සටන් කළ යුතුයි. නමුත් ඔහු දේශපාලන ician යෙක් මිස පාබල හමුදාවක් නොවේ. නිසැකවම ඔහුට තම දේශපාලන සතුරන්ට හිසට වෙඩි තැබිය නොහැක. පෙට්රියස් ඔහුට අතථ්‍ය ක්‍රමයක් ලබා දී ඇති හෙයින්, මලිකිට ඔහුගේ විශේෂිත තත්වයන් අනුව සටන් ක්‍රමයේ තමාගේම අනුවාදයක් ක්‍රියාත්මක කළ හැකිය:

  1. සතුරා සොයා ගන්න.
  2. බීඑස් තුරුම්පු චෝදනා කිහිපයක් සමඟ ඔහුව අත්අඩංගුවට ගන්න.
  3. ගෙදර යන්න
  4. බියර් ගන්න.

වෙනත් වචන වලින් කිවහොත්, අථත්ය ක්රමයක් බොයිලර් ප්ලේට් උපදෙස් සපයයි - නමුත් මේවා සාමාන්ය උපදෙස් වන අතර, හමුදා තත්වයන් යටතේ සිටින පුද්ගලයින්ට ඔවුන්ගේ විශේෂිත තත්වයන් අනුව වඩාත් නිශ්චිත කළ හැකිය.

දෙක අතර වෙනස

  • ජෝර්ජ් බුෂ් කිසිදු ක්‍රියාත්මක කිරීමේ විස්තරයක් සනාථ නොකරයි. මෙය වෙනත් අයෙකු විසින් සැපයිය යුතුය. මෙය වියුක්ත ක්‍රමයකි.

  • අනෙක් අතට පෙට්ට්රාවුස් කරන්නේ ක්රියාත්මක කිරීම තොරතුරු සැපයීමට නමුත් ඔහු ඔවුන් වඩා හොඳ යමක් ගෙන එනු හැකි නම්, තමන්ගේ ම වෙළුම සමඟ ඔහුගේ නියෝග ප්රතිස්ථාපනය කිරීමට තම යටත් සඳහා අවසර ලබා දී ඇත.

උපකාරවත් වන බලාපොරොත්තුව.


2

වියුක්ත ශ්‍රිතය (ක්‍රමය):

වියුක්ත ක්‍රමයක් යනු වියුක්ත මූල පදය සමඟ ප්‍රකාශයට පත් කරන ක්‍රමයකි.

● එයට ශරීරයක් නොමැත.

● එය ව්‍යුත්පන්න පන්තිය විසින් ක්‍රියාත්මක කළ යුතුය.

Method ක්‍රමයක් වියුක්ත නම් පන්තිය වියුක්ත විය යුතුය.

අතථ්‍ය ශ්‍රිතය (ක්‍රමය):

Virt අථත්ය ක්රමය යනු අථත්ය මූල පදය සමඟ ප්රකාශයට පත් කරන ක්රමය වන අතර එය උඩින් යතුරුපදය භාවිතා කිරීමෙන් ව්යුත්පන්න පන්ති ක්රමය මගින් අභිබවා යා හැකිය.

Over එය ඉක්මවා යා යුතුද නැද්ද යන්න ව්‍යුත්පන්න පන්තියට අයත් වේ.


1

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


1

වියුක්ත ක්‍රියාකාරිත්වයට ශරීරයක් තිබිය නොහැකි අතර ළමා පන්ති විසින් එය අභිබවා යා යුතුය

අතථ්‍ය ක්‍රියාකාරිත්වයට ශරීරයක් ඇති අතර ළමා පන්ති විසින් ඒවා ඉක්මවා යා හැකිය


1

සාමාන්‍ය වස්තු නැඹුරු දෘෂ්ටි කෝණයෙන්:

වියුක්ත ක්‍රමය සම්බන්ධයෙන් : ඔබ මව් පන්තියේ වියුක්ත ක්‍රමයක් තැබූ විට ඇත්ත වශයෙන්ම ඔබ කියන්නේ ළමා පන්තිවලට ය: ඒයි ඔබට මේ වගේ ක්‍රම අත්සනක් ඇති බව සලකන්න. ඔබට එය භාවිතා කිරීමට අවශ්‍ය නම් ඔබ විසින්ම ක්‍රියාත්මක කළ යුතුය!

අතථ්‍ය ශ්‍රිතය සම්බන්ධයෙන් : ඔබ මව් පන්තියට අතථ්‍ය ක්‍රමයක් දැමූ විට ඔබ ව්‍යුත්පන්න පංතිවලට කියන්නේ: ඒයි ඔබ වෙනුවෙන් යමක් කරන ක්‍රියාකාරිත්වයක් මෙහි තිබේ. මෙය ඔබට ප්‍රයෝජනවත් නම් එය භාවිතා කරන්න. එසේ නොවේ නම්, මෙය ඉක්මවා ඔබේ කේතය ක්‍රියාත්මක කරන්න, ඔබට පවා මගේ කේතයේ ක්‍රියාත්මක කිරීම භාවිතා කළ හැකිය!

මෙය සාමාන්‍ය OO හි මෙම සංකල්ප දෙක අතර වෙනස්කම පිළිබඳ දර්ශනයකි


1

වියුක්ත ශ්‍රිතයක් ක්‍රියාත්මක කිරීමකින් තොරව අත්සනක් “නිකම්ම” වේ. පංතිය භාවිතා කළ හැකි ආකාරය ප්‍රකාශ කිරීම සඳහා එය අතුරු මුහුණතක භාවිතා වේ. එය ව්‍යුත්පන්න පංතියක ක්‍රියාත්මක කළ යුතුය.

අතථ්‍ය ශ්‍රිතය (ඇත්ත වශයෙන්ම ක්‍රමය), ඔබ ප්‍රකාශ කරන ශ්‍රිතයක් වන අතර එය උරුම ධූරාවලි පන්තියක ක්‍රියාත්මක කළ යුතුය.

එවැනි පංතියේ උරුම වූ අවස්ථා, ඔබ එය ක්‍රියාත්මක නොකරන්නේ නම්, පහළ ධූරාවලියක් තුළ ක්‍රියාත්මක කිරීම ද උරුම වේ.


1

පංතියක් මෙම වියුක්ත පංතියෙන් උපුටා ගත්වක් නම්, එය වියුක්ත සාමාජිකයා අභිබවා යාමට බල කෙරෙයි. මෙය අතථ්‍ය විකරණකාරකයට වඩා වෙනස් වන අතර, එමඟින් සාමාජිකයා විකල්පයක් ලෙස අභිබවා යා හැකි බව නියම කරයි.


0

C # හි අථත්‍ය පන්තියට ඇමතුම් කිසිවක් නොමැත.

කාර්යයන් සඳහා

  1. වියුක්ත ශ්‍රිතයට ඇත්තේ අත්සන පමණි, ධාවක පන්තිය ක්‍රියාකාරීත්වය අභිබවා යා යුතුය.
  2. අතථ්‍ය ශ්‍රිතය මඟින් ක්‍රියාකාරීත්වයේ කොටසක් ඩ්‍රයිව් පංතිය විසින් අවශ්‍යතාවය අනුව අභිබවා යා හැකිය

ඔබේ අවශ්‍යතාවය අනුව ඔබට තීරණය කළ හැකිය.


0

වියුක්ත ක්‍රමයට ක්‍රියාත්මක කිරීමක් නොමැත. එය මව් පන්තියේ ප්‍රකාශයට පත් කෙරේ. එම ක්‍රමය ක්‍රියාත්මක කිරීම සඳහා ළමා පන්තියට ප්‍රතිචාර දැක්විය හැකිය.

අතථ්‍ය ක්‍රමයට මව් පන්තියේ ක්‍රියාත්මක කිරීමක් තිබිය යුතු අතර එය මව් පන්තියේ ක්‍රියාත්මක කිරීම භාවිතා කළ යුතුද යන්න හෝ ළමා පන්තියේදී එම ක්‍රමය සඳහාම නව ක්‍රියාත්මක කිරීමක් කළ යුතුද යන්න තේරීමට ළමා පන්තියට පහසුකම් සපයයි.


0

C ++ පසුබිමක සිට, C # අථත්‍යය C ++ අථත්‍යයට අනුරූප වන අතර C # වියුක්ත ක්‍රම C ++ පිරිසිදු අථත්‍ය ශ්‍රිතයට අනුරූප වේ


0

වියුක්ත ශ්‍රිතයක් හෝ ක්‍රමයක් යනු පංතියක් විසින් නිරාවරණය කරනු ලබන පොදු “මෙහෙයුමේ නමක්” වන අතර, එහි අරමුණ වියුක්ත පංති සමඟ මූලික වශයෙන් වස්තුවක් ක්‍රියාවට නැංවිය යුතු ව්‍යුහයට එරෙහිව වස්තු සැලසුම් කිරීමේදී යම් ආකාරයක බාධාවක් සපයයි.

ඇත්ත වශයෙන්ම එහි වියුක්ත පන්තියෙන් උරුම වන පංතිවලට මෙම ක්‍රමයට ක්‍රියාත්මක කිරීමක් කළ යුතු අතර, සාමාන්‍යයෙන් සම්පාදකයින් ඒවා නොකරන විට දෝෂ මතු කරයි.

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

අතථ්‍ය ශ්‍රිතයක් හෝ ක්‍රමයක් යනු හුදෙක් පන්තියක පොදු හැසිරීමක් නිරූපණය කරන ක්‍රමයකි, නමුත් උරුමය දාමය තුළ එය වෙනස් කිරීමට අපට නිදහසේ ඉඩ දිය හැකිය, මන්ද ළමා පංතිවලට එම හැසිරීම සඳහා නිශ්චිත දිගු කිහිපයක් ක්‍රියාත්මක කිරීමට අවශ්‍ය විය හැකි යැයි අපි සිතමු.

ඔවුන් දෙදෙනාම යම් ආකාරයක නියෝජනය polymorpfhism වස්තු මූලික සුසමාදර්ශය තුළ.

හොඳ උරුම ආකෘතියක් සඳහා අපට වියුක්ත ක්‍රම සහ අථත්‍ය කාර්යයන් එකට භාවිතා කළ හැකිය.

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


0

මෙන්න මම නියැදි කේත කිහිපයක් ලියන්නේ අතුරුමුහුණත්, වියුක්ත පංති සහ සාමාන්‍ය පංති වල හැසිරීම් ඉතා මූලික මට්ටමකින් බැලීමට මෙය තරමක් පැහැදිලි උදාහරණයක් විය හැකි යැයි සිතමිනි. ඔබට මෙම කේතය නිරූපණයක් ලෙස භාවිතා කිරීමට අවශ්‍ය නම් එය ව්‍යාපෘතියක් ලෙස ගිතුබ් හි සොයාගත හැකිය: https://github.com/usavas/JavaAbstractAndInterfaceDemo

public interface ExampleInterface {

//    public void MethodBodyInInterfaceNotPossible(){
//    }
    void MethodInInterface();

}

public abstract class AbstractClass {
    public abstract void AbstractMethod();

    //    public abstract void AbstractMethodWithBodyNotPossible(){
    //
    //    };

    //Standard Method CAN be declared in AbstractClass
    public void StandardMethod(){
        System.out.println("Standard Method in AbstractClass (super) runs");
    }
}

public class ConcreteClass
    extends AbstractClass
    implements ExampleInterface{

    //Abstract Method HAS TO be IMPLEMENTED in child class. Implemented by ConcreteClass
    @Override
    public void AbstractMethod() {
        System.out.println("AbstractMethod overridden runs");
    }

    //Standard Method CAN be OVERRIDDEN.
    @Override
    public void StandardMethod() {
        super.StandardMethod();
        System.out.println("StandardMethod overridden in ConcreteClass runs");
    }

    public void ConcreteMethod(){
        System.out.println("Concrete method runs");
    }

    //A method in interface HAS TO be IMPLEMENTED in implementer class.
    @Override
    public void MethodInInterface() {
        System.out.println("MethodInInterface Implemented by ConcreteClass runs");

    //    Cannot declare abstract method in a concrete class
    //    public abstract void AbstractMethodDeclarationInConcreteClassNotPossible(){
    //
    //    }
    }
}

-4

මගේ අවබෝධයට:

වියුක්ත ක්‍රම:

වියුක්ත ක්‍රම පැවැත්විය හැක්කේ වියුක්ත පන්තියට පමණි. ව්‍යුත්පන්න පංතියට ක්‍රමවේදය ක්‍රියාත්මක කළ යුතු අතර පන්තියේ කිසිදු ක්‍රියාත්මක කිරීමක් ලබා නොදේ.

අතථ්‍ය ක්‍රම:

පංතියකට මේවා ප්‍රකාශ කළ හැකි අතර ඒවා ක්‍රියාත්මක කිරීමට ද හැකිය. ව්‍යුත්පන්න පංතියට එය අභිබවා යාමේ ක්‍රමය ක්‍රියාත්මක කළ යුතුය.

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.