ቤት / መመሪያዎች / ጌተርስ እና ሴተርስ ቦታቸውን ማወቅ ያለባቸው አስማት ናቸው። የበይነገጽ ውሂብ አዘጋጅ ንብረት የአጭር እጅ ማስታወሻ

ጌተርስ እና ሴተርስ ቦታቸውን ማወቅ ያለባቸው አስማት ናቸው። የበይነገጽ ውሂብ አዘጋጅ ንብረት የአጭር እጅ ማስታወሻ

ከአንባቢዎቼ አንዱ የሆነው ጆሴፍ ክራውፎርድ እንዴት ጌተርስ እና ሴተር መፃፍ እንደማልወድ የሚገልጽ ጽሑፍ አንብቦ አስማት __get እና __set ዘዴዎችን መጠቀም እንደምችል ጠቁሟል።
እነሱን በተለመደው መንገድ መጠቀም ጥሩ ያልሆነው ለምን እንደሆነ እነግርዎታለሁ. በPHP (ተለዋዋጭ ቋንቋ) ውስጥ የማይለዋወጡ ዓይነቶችን መፍጠር - እነሱ በእውነት ጠቃሚ ሆነው የመጡበትን ታሪክ እነግርዎታለሁ።
የ__get እና __set ስልቶችን ለማያውቋቸው፣ ሁለት "አስማት" ዘዴዎች ናቸው እንደዚህ የሚሰሩ።
ክፍል እንስሳ (ተግባር __ማግኘት ($ ንብረት) ( //...) ተግባር __set($ንብረት ፣ $ እሴት) (//... )) $ ላም = አዲስ እንስሳ; $ ላም-> ክብደት = "1 ቶን"; // ልክ እንደ $ ላም-> __ ስብስብ ("ክብደት", "1 ቶን") ማተም $ ላም->ክብደት; // ልክ እንደ ህትመት $ ላም->__ማግኘት ("ክብደት");

በተለምዶ ከላይ የተጠቀሱት ዘዴዎች ተለዋዋጭ ባህሪያትን ለመፍጠር ጥቅም ላይ ይውላሉ. ከዚህ ምን መደምደሚያ ላይ መድረስ ይቻላል? ማንኛቸውም የዘፈቀደ ንብረቶችን መፍጠር ከፈለጉ ሃሽ ብቻ ይጠቀሙ (ቁልፎች ያሉት ድርድር)።
ስለ ጌተርስ እና ሰሪዎች ምን ጥሩ ነገር አለ?
እንይ፡
ክፍል Animal (የወል $weightInKgs;) $ ላም = አዲስ እንስሳ; $ ላም->weightInKgs = -100;

ምን? አሉታዊ ክብደት? ይህ ከአብዛኞቹ አመለካከቶች አንጻር የተሳሳተ ነው።
ላም ከ 100 ኪሎ ግራም በታች መመዘን የለበትም (እኔ እንደማስበው :). በ 1000 ውስጥ ተቀባይነት አለው.
እንዲህ ያለውን ገደብ እንዴት ማረጋገጥ እንችላለን?
__get እና __set መጠቀም በጣም ፈጣን መንገድ ነው።
ክፍል እንስሳ (የግል $properties = ድርድር ()፤ የህዝብ ተግባር __ማግኘት($ስም) (ከሆነ(! ባዶ($this->ንብረቶች[$ስም])) ($this->ንብረቶቹን[$name] ይመልሱ፤ ) ሌላ () ጣል አዲስ ልዩ("ያልተገለጸ ንብረት ".$ ስም" ተጠቃሽ።) ) የህዝብ ተግባር __set($name፣ $value)(ከ($ስም == "ክብደት")) (ከሆነ($ እሴት)< 100) { throw new Exception("The weight is too small!") } } $this->ንብረቶች[$ ስም] = $ እሴት;

)) $ ላም = አዲስ እንስሳ; $ ላም->weightInKgs = -100; // የተለየ ነገር ይጥላል
ከ10-20 ንብረቶች ያለው ክፍል እና ለእነሱ ቼኮች ካሉስ? በዚህ ሁኔታ, ችግሮች የማይቀሩ ናቸው.< 100) { throw new Exception("The weight is too small!") } if($this->የህዝብ ተግባር __set($name፣ $value) (ከ($ስም == "ክብደት") ከሆነ($ እሴት)

ክብደት != $ክብደት በጣም ትንሽ ወይም በጣም ትልቅ ነው")) $this->numberOfLegs = $numberOfLegs; $this->numberOfHooves = $numberOfLegs; ) ከሆነ($ስም == "ወተት ዓይነት") ( .... ሀሳቡን ገባህ ... ) $this->ንብረቶች[$name] = $value;
)< 100) { throw new Exception("The weight is too small!"); } if($this->በአንጻሩ፣ መረጃን ማረጋገጥን በተመለከተ ጌቴተሮች እና አቀናባሪዎች በጣም ጥሩ ናቸው።

ክፍል Animal (የግል $ክብደት፤ የግል $numberOfLegs፤ የግል $numberOfHooves፤የወል $ቅፅል ስም፤የወል ተግባር setNumberOfLegs($numberOfLegs) (ከ ($numberOfLegs!= 100) (ከሆነ(((የእግሮች ቁጥር!= 100) ከሆነ) አዲስ ልዩ ጣል("የእግር ብዛት በጣም ትንሽ ወይም በጣም ትንሽ ነው) ትልቅ");) $this->numberOfLegs = $numberOfLegs; $this->numberOfHooves = $numberOfLegs;) የህዝብ ተግባር getNumberOfLegs () ($this->numberOfLegs ይመልሱ;) የህዝብ ተግባር setWeight($weight) (ከሆነ ($ ክብደት)
ክብደት! = $ ክብደት) ( እረኛ :: የክብደት ለውጥን ያሳውቁ ($ ላም, $ ክብደት); ) $this-> ክብደት = $ ክብደት;
) የሕዝብ ተግባር getWeight () (ይህን $this->ክብደት ይመልሱ;))
ከ C # አጭር ተግባራት (ማግኘት ፣ አዘጋጅ;) ጋር የሚወዳደር ምንም የለም። ምናልባት እንዲህ ዓይነቱ ድጋፍ በቅርቡ በ PHP ውስጥ ይታያል ፣ ግን አሁን ዘና አንበል…
እንደገና፣ እነዚህን ሁሉ ጌቶች እና አዘጋጅዎች አልጻፍኩም - ፒኤችፒ አውሎ ነፋስ አደረገልኝ። በቀላሉ የሚከተለውን ጻፍኩ፡-
ክፍል እንስሳ (የግል $ክብደት፤ የግል $numberOfLegs;)

እና Alt+Insert -> Getters and setters ተጫን። PHPStorm ሁሉንም ነገር በራስ-ሰር አመነጨ።
አሁን፣ እንደ ፒኤችፒ አውሎ ነፋስ ተጨማሪ ጥቅም፣ ከጌትተሮች እና ሰሪዎች ጋር ስሰራ፣ ራስ-አጠናቅቅ ተግባርን የመጠቀም ችሎታ አለኝ፡-

በ__get ጉዳይ ይህ አማራጭ የለኝም፣ ይህን ብቻ ነው መጻፍ የምችለው፡-
$ ላም-> ዊዝ = -100

አሁን ላም ከ 100 ኪ.ግ በታች "ይመዝናል" (ይመዝናል).
ይህ በኪሎ ግራም ክብደት መሆኑን መርሳት እችላለሁ, ክብደትን ብቻ ይፃፉ እና ሁሉም ነገር ይሰራል.
ስለዚህ, getters እና setters በጣም ጠቃሚ ሊሆኑ ይችላሉ (ነገር ግን አሁንም አታመልኳቸው, የጃቫ ፕሮግራመር አይደሉም). ነፃ ንብረቶችን ብቻ ከፈለጉ፣ ድርድር ይጠቀሙ፡-
$ ላም = አደራደር ("ክብደት" => 100፣ "እግር" => 4);

ይህ ብልሃት ከ__ማግኝት እና __ሴት ለመንቀል በጣም ቀላል ነው።
ነገር ግን፣ የእርስዎ ውሂብ ሁል ጊዜ ትክክለኛ እሴቶች ብቻ እንዳለው ማረጋገጥ ከፈለጉ፣ አቀናባሪዎችን ከማረጋገጫ ጋር ይጠቀሙ። እንደ ፒኤችፒ ስቶርም ያለ የተቀናጀ የልማት አካባቢ (IDE) ካሎት፣ ለመጠቀም በጣም ቀላል ስለሆኑ አቀናባሪዎችን ይወዳሉ። ለ PHP Storm ከ$ cow->setLegs() ይልቅ cosl ለመተየብ በቂ ይሆናል። አዎ ቀላል ነው! ምንም ተጨማሪ የትየባዎች የሉም እና ዘዴው ምን መለኪያዎች እንደሚወስዱ ማየት ይችላሉ።
የ__ስብስብ ዘዴ ሌላ ችግር አለው። የሚቀበለው 1 መለኪያ ብቻ ነው። 2 ቢፈልጉስ? ለምሳሌ፣ ልክ እዚህ፡ $store1->setPrice("ንጥል-1"፣100)። በመደብሩ ውስጥ የምርቱን ዋጋ ማዘጋጀት ያስፈልግዎታል. የ__set ዘዴ ይህንን እንዲያደርጉ አይፈቅድልዎትም፣ ግን አቀናባሪው ያደርጋል።

የበይነገጽ ትግበራ አዘጋጅየተባዛ ውሂብ ሊይዝ የማይችል ያልታዘዘ ስብስብ ነው።

በይነገጽ አዘጋጅየሚከተሉትን ዘዴዎች ያካትታል:

ዘዴመግለጫ
ያክሉ (ነገር o) ከጎደለ አንድ ኤለመንት ወደ ስብስቡ ማከል። ኤለመንቱ ከተጨመረ እውነትን ይመልሳል።
addAll(ስብስብ ሐ) የጎደሉ ከሆነ የስብስብ ዕቃዎችን ማከል።
ግልጽ() ስብስቡን በማጽዳት ላይ.
ይዟል(ነገር o) በአንድ ስብስብ ውስጥ የአንድ አካል መኖሩን ማረጋገጥ. ኤለመንቱ ከተገኘ እውነት ይመለሳል።
ሁሉንም ይይዛል(ስብስብ ሐ) በአንድ ስብስብ ውስጥ ስብስብ መኖሩን ማረጋገጥ. ሁሉም ንጥረ ነገሮች በስብስቡ ውስጥ ከተያዙ እውነትን ይመልሳል።
እኩል (ነገር o) የእኩልነት ማረጋገጫ።
hashcode() የአንድ ስብስብ hashcode በማግኘት ላይ።
ባዶ() የንጥረ ነገሮች መኖራቸውን ማረጋገጥ. በክምችቱ ውስጥ ምንም ንጥረ ነገሮች ከሌሉ እውነትን ይመልሳል።
ተደጋጋሚ () የስብስብ ድጋሚ ለማግኘት ተግባር።
አስወግድ (ነገር o) አንድን አካል ከአንድ ስብስብ በማስወገድ ላይ።
ሁሉንም አስወግድ(ስብስብ ሐ) የተላለፈውን ስብስብ ሁሉንም ንጥረ ነገሮች ከስብስቡ ያስወግዳል።
ሁሉንም አቆይ(ስብስብ ሐ) ያለፈው ስብስብ አባል ያልሆኑ ንጥረ ነገሮችን በማስወገድ ላይ።
መጠን() የስብስብ አካላት ብዛት
ወደ አደራደር() ስብስብን ወደ የንጥረ ነገሮች ድርድር በመቀየር ላይ።
ወደ አደራደር(ቲ ሀ) ስብስብን ወደ የንጥረ ነገሮች ድርድር በመቀየር ላይ። ከቀደምት ዘዴ በተለየ የነገሮችን አይነት ድርድር ይመልሳል፣ ይህ ዘዴ በመለኪያው ውስጥ ያለፉትን አይነት ነገሮች ይመልሳል።

ቤተሰብን ለማገናኘት አዘጋጅማካተት HashSet, TreeSetእና LinkedHashSet. በስብስብ አዘጋጅየተለያዩ ትግበራዎች የተለያዩ የማከማቻ ክፍሎችን ይጠቀማሉ. በHashSet ውስጥ፣ የንጥረ ነገሮች ቅደም ተከተል ለፈጣን ፍለጋ የተመቻቸ ነው። የTreeSet ኮንቴይነር በከፍታ ቅደም ተከተል የተደረደሩ ነገሮችን ያከማቻል። LinkedHashSet ንጥረ ነገሮችን በታከሉበት ቅደም ተከተል ያከማቻል።

HashSet የውሂብ ስብስብ

HashSet ግንበኞች፡-

// የመጀመሪያ አቅም 16 እና ነባሪ የመጫኛ መጠን 0.75 የህዝብ HashSet () ያለው ባዶ ስብስብ ይፍጠሩ። // ከስብስብ አካላት ስብስብ መፍጠር ይፋዊ HashSet (ስብስብ ሐ) // ከተጠቀሰው የመነሻ አቅም እና // ነባሪ የመጫኛ ሁኔታ (0.75) የህዝብ HashSet (int initialCapacity) ያለው ስብስብ ይፍጠሩ። // ከተጠቀሰው የመነሻ አቅም እና // የመጫኛ ምክንያት ይፋዊ HashSet (int initialCapacity, float loadFactor) ያለው ስብስብ ይፍጠሩ;

HashSet ዘዴዎች

  • ይፋዊ int መጠን ()
  • የህዝብ ቡሊያን ባዶ()
  • የህዝብ ቡሊያን አክል(ነገር o)
  • የህዝብ ቡሊያን addAll(ስብስብ ሐ)
  • የህዝብ ቡሊያን ማስወገድ (ነገር o)
  • የህዝብ ቡሊያን ማስወገድ ሁሉም(ስብስብ ሐ)
  • የህዝብ ቡሊያን ይይዛል(ነገር o)
  • የህዝብ ባዶነት ()
  • የህዝብ ነገር ክሎን()
  • ይፋዊ ኢተርተር ()
  • የህዝብ ነገር ወደ አደራደር()
  • የህዝብ ቡሊያን ማቆየት ሁሉም(ስብስብ ሐ)

HashSetከ ArrayList ጋር ተመሳሳይ ዘዴዎችን ይዟል. ልዩነቱ የ add(Object o) ዘዴ ነው፣ ይህም አንድ ነገር ከጎደለ ብቻ ይጨምራል። አንድ ነገር ከተጨመረ፣ የመደመር ዘዴው ወደ እውነት ይመለሳል፣ አለበለዚያ ሐሰት።

HashSet የመጠቀም ምሳሌ፡-

HashSet hashSet = አዲስ HashSet (); hashSet.add ("ድንች"); hashSet.add ("ካሮት"); hashSet.add ("Beets"); hashSet.add ("ኩምበር"); // የሚቀጥለው ግቤት በ hashSet.add ("ድንች") ስብስብ ውስጥ መሆን የለበትም; // የተቀመጠውን መጠን ወደ ኮንሶል ሲስተም.out.println ያትሙ ("HashSet size =" + hashSet.size ()); // ለማጽናናት የኢተርተር ግቤቶችን ያትሙ

በኮንሶሉ ውስጥ 4 ግቤቶችን ብቻ ማየት አለብን። መዝገቦች ወደ ስብስቡ የተጨመሩበት ቅደም ተከተል የማይታወቅ እንደሚሆን ልብ ሊባል ይገባል. HashSetመልሶ ማግኘትን ለማፋጠን hashing ይጠቀማል።

የአጠቃቀም ምሳሌ HashSetከኢንቲጀር እሴቶች ጋር። ከ 0 እስከ 9 ከ 25 ሊሆኑ የሚችሉ በዘፈቀደ የተመረጡ እሴቶችን ወደ ስብስቡ እንጨምራለን - ምንም ማባዛት አይኖርም።

የዘፈቀደ የዘፈቀደ = አዲስ የዘፈቀደ (30); አዘጋጅ iset = አዲስ HashSet (); ለ(int i = 0; i< 25; i++) iset.add(random.nextInt(10)); // Вывести в консоль записи Iterator

መተግበሩን ልብ ሊባል ይገባል። HashSetአልተመሳሰልም። ብዙ ክሮች የሃሽ ስብስብን በአንድ ጊዜ ከደረሱ እና አንድ ወይም ከዚያ በላይ ክሮች ስብስቡን ማሻሻል ካለባቸው፣ በውጪ መመሳሰል አለበት። ይህ በአጋጣሚ ያልተመሳሰለ ወደ ስብስቡ መድረስን ለመከላከል በፍጥረት ጊዜ በተሻለ ሁኔታ ይከናወናል፡-

አዘጋጅ set = Collections.synchronizedSet(አዲስ HashSet ());

LinkedHashSet የውሂብ ስብስብ

ክፍል LinkedHashSetይወርሳል HashSetምንም አዲስ ዘዴዎችን ሳይጨምር, እና በተጨመሩበት ቅደም ተከተል የስብስቡ ንጥረ ነገሮች ተያያዥነት ያለው ዝርዝር ይይዛል. ይህ ወደ ስብስቡ ውስጥ ማስገባትን በሥርዓት ለመድገም ያስችላል።

LinkedHashSet ግንበኞች፡-

// ባዶ ስብስብ በመነሻ አቅም (16) እና ነባሪ የመጫኛ ዋጋ (0.75) ይፋዊ LinkedHashSet () // ከስብስብ አካላት ስብስብ ይፍጠሩ የህዝብ LinkedHashSet አቅም እና የፋክተር እሴት ነባሪ ጭነት (0.75) ይፋዊ LinkedHashSet(int initialCapacity) // ከተጠቀሰው የመጀመሪያ አቅም እና የመጫኛ ምክንያት ይፋዊ LinkedHashSet(int initialCapacity፣float loadFactor) ጋር ስብስብ ይፍጠሩ

ልክ እንደ HashSet, LinkedHashSetአልተመሳሰልም። ስለዚህ ፣ ይህንን አተገባበር ብዙ ክሮች ባለው መተግበሪያ ውስጥ ሲጠቀሙ ፣ አንዳንዶቹ በስብስቡ ላይ ለውጦችን ሊያደርጉ ይችላሉ ፣ ማመሳሰል በፍጥረት ደረጃ መከናወን አለበት ።

አዘጋጅ set = Collections.synchronizedSet(አዲስ LinkedHashSet ());

TreeSet የውሂብ ስብስብ

ክፍል TreeSetንጥረ ነገሮችን ለማከማቸት ዛፍን የሚጠቀም ስብስብ ይፈጥራል. ነገሮች በተደረደሩ ወደላይ በሚወጡ ቅደም ተከተሎች ይከማቻሉ።

TreeSet ግንበኞች፡-

// ባዶ የዛፍ ዛፍ ይፍጠሩ ፣ በተፈጥሮው የተደረደረ ፣ // በንጥረቶቹ ቅደም ተከተል TreeSet () // በተጠቀሰው ስብስብ ውስጥ ያሉትን ንጥረ ነገሮች የያዘ ፣ // እንደ ንጥረ ነገሮቹ ተፈጥሯዊ ቅደም ተከተል የተደረደረ የዛፍ ዛፍ ይፍጠሩ። TreeSet (ስብስብሐ) // በ comparator TreeSet (Comparator) መሠረት የተደረደረ ባዶ የዛፍ ስብስብ ይፍጠሩcomparator) // ተመሳሳይ ንጥረ ነገሮችን የያዘ የዛፍ ስብስብ ይፍጠሩ እና ከተጠቀሰው የተደረደሩት TreeSet (SortedSet) ጋር ተመሳሳይ ቅደም ተከተል ይጠቀሙ ሰ)

TreeSet ዘዴዎች

  • ቡሊያን አክል (ነገር o)
  • ቡሊያን addAll (ስብስብሐ)
  • የነገር ጣሪያ (ነገር o)
  • ባዶ ግልጽ()
  • TreeSet clone()
  • ንፅፅርማነፃፀሪያ()
  • ቡሊያን ይዟል(ነገር o)
  • ደጋፊ የሚወርድ ኢተርተር()
  • Navigable አዘጋጅ የሚወርድ ስብስብ()
  • ነገር መጀመሪያ()
  • የነገር ወለል (ነገር o)
  • ተደርድሯል አዘጋጅ የጆሮ ማዳመጫ (ኢ)
  • Navigable አዘጋጅ headset(ኢ e፣ ቡሊያንን ያካተተ)
  • ከፍ ያለ ነገር (ነገር o)
  • ቡሊያን ባዶ()
  • ደጋፊ ተደጋጋሚ ()
  • የመጨረሻው()
  • ኢ ዝቅተኛ (ኢ)
  • ኢ ምርጫ መጀመሪያ()
  • ኢ ምርጫ የመጨረሻ()
  • ቡሊያን አስወግድ (ነገር o)
  • ኢንት መጠን()
  • Sliterator መለያየት()
  • Navigable አዘጋጅ ንዑስ ስብስብ(ኢ ከኤሌመንት፣ ቡሊያን ከአካታች፣ ኢ እስከ ኢሌመንት፣ ቡሊያን እስከ አካታች)
  • ተደርድሯል አዘጋጅ ንዑስ ስብስብ(E ከElement፣ E toElement)
  • ተደርድሯል አዘጋጅ tailSet (E fromElement)
  • Navigable አዘጋጅ tailSet (ኢ ከኤሌመንት፣ ቡሊያን ያካተተ)
  • በሚከተለው የተሻሻለ ምሳሌ ከመጠቀም TreeSetእሴቶቹ በታዘዘ ቅጽ ወደ ኮንሶሉ ይወጣሉ።

    ተደርድሯል አዘጋጅ treeSet = አዲስ TreeSet (); treeSet.add ("Beets"); treeSet.add ("ከኩምበርስ"); treeSet.add ("ቲማቲም"); treeSet.add ("ድንች"); treeSet.add ("ካሮት"); // ይህ ግቤት በተዘጋጀው treeSet.add ("ድንች" ውስጥ መካተት የለበትም); // የቅንብሩን መጠን ወደ ኮንሶል ሲስተም.out.println ያትሙ ("treeSet size =" + treeSet.size ()); // ለማጽናናት የኢተርተር ግቤቶችን ያትሙ itr = treeSet.iterator (); ሳለ (itr.hasNext ()) (System.out.println (itr.next ().toString ());) የዘፈቀደ የዘፈቀደ = አዲስ የዘፈቀደ (30); ተደርድሯል አዘጋጅ (); ለ(int i = 0; i< 25; i++) iset.add(random.nextInt(10)); // Вывести в консоль записи Iteratoriset = አዲስ TreeSet

    itr = iset.iterator (); ሳለ (itr.hasNext ()) (System.out.println (itr.next () .toString ());)

    የመጨረሻው ዝመና: 07/29/2018

    ከመደበኛ ዘዴዎች በተጨማሪ፣ የC # ቋንቋ ባህሪ የሚባሉ ልዩ የመዳረሻ ዘዴዎችን ይሰጣል። ወደ ክፍል መስኮች በቀላሉ መድረስን ይሰጣሉ፣ ዋጋቸውን ይወቁ ወይም ያዘጋጃሉ።

    የመደበኛው ንብረት መግለጫ የሚከተለው አገባብ አለው፡-

    [መዳረሻ_ማሻሻያ] ተመላሽ_አይነት ብጁ_ስም (// የንብረት ኮድ)

    ለምሳሌ፡-

    ክፍል ሰው (የግል የሕብረቁምፊ ስም፣ የወል ስም (የመመለሻ ስም፣) አዘጋጅ (ስም = ዋጋ፣)))

    በዚህ ንብረት አማካኝነት ተለዋዋጭ የስም መዳረሻን መቆጣጠር እንችላለን። የመደበኛው ንብረት ፍቺ ማግኘት እና ማገድ ብሎኮችን ይዟል። በማግኘት እገዳው ውስጥ የሜዳውን ዋጋ እንመለሳለን, እና በተዘጋጀው እገዳ ውስጥ እናስቀምጠዋለን. የእሴት መለኪያው የሚተላለፈውን ዋጋ ይወክላል.

    ይህንን ንብረት እንደሚከተለው መጠቀም እንችላለን-

    ሰው p = አዲስ ሰው (); // ንብረቱን ያዘጋጁ - የ Set block ተቀስቅሷል // ዋጋው "ቶም" በንብረቱ ላይ የተላለፈው ዋጋ ነው p.Name = "ቶም"; // የንብረቱን ዋጋ ያግኙ እና ለተለዋዋጭ ይመድቡ - የ Get string personName = p.Name block ተቀስቅሷል;

    ምናልባት ጥያቄው ሊነሳ ይችላል, በዚህ ሁኔታ ውስጥ ከተለመዱ የክፍል መስኮች ጋር ማለፍ ከቻልን ለምን ንብረቶች እንፈልጋለን? ነገር ግን ንብረቶች አስፈላጊ ሊሆኑ የሚችሉ ተጨማሪ አመክንዮዎችን ለመጨመር ያስችሉዎታል, ለምሳሌ, ለክፍል ተለዋዋጭ እሴት ሲሰጡ. ለምሳሌ፣ የዕድሜ ማረጋገጫ ማዘጋጀት አለብን፡-

    የመደብ ሰው (የግል ኢንቲ ዕድሜ፣ የህዝብ ኢንቲ እድሜ (ከተቀናበረ (እሴት< 18) { Console.WriteLine("Возраст должен быть больше 17"); } else { age = value; } } get { return age; } } }

    ስብስቡ እና ማገጃዎች በአንድ ጊዜ በንብረት ውስጥ መገኘት የለባቸውም። አንድ ንብረት በማግኘት ብሎክ ብቻ ከተገለጸ ንብረቱ ተነባቢ-ብቻ ነው - ዋጋውን ማግኘት እንችላለን ግን አላስቀመጥነውም። በአንጻሩ፣ አንድ ንብረት የተቀናበረ ብሎክ ካለው፣ ያ ንብረቱ ሊጻፍ የሚችለው ብቻ ነው - ዋጋውን ብቻ ማዋቀር ይችላሉ፣ ነገር ግን ሊያገኙት አይችሉም፡-

    ክፍል ሰው (የግል የሕብረቁምፊ ስም፤ // ተነባቢ-ብቻ ንብረት የሕዝብ ሕብረቁምፊ ስም (የመመለሻ ስም፣)) የግል ኢንቲ ዕድሜ፤ // ጻፍ-ብቻ ንብረት የሕዝብ int ዕድሜ ( ስብስብ (ዕድሜ = ዋጋ፣)))

    የመዳረሻ መቀየሪያዎች

    የመዳረሻ ማሻሻያዎችን ለመላው ንብረቱ ብቻ ሳይሆን ለግለሰብ ብሎኮችም - ማግኘት ወይም ማቀናበር እንችላለን።

    ክፍል ሰው (የግል የሕብረቁምፊ ስም፣ የወል ሕብረቁምፊ ስም (የመመለሻ ስም፣) የግል ስብስብ (ስም = ዋጋ፣)) ይፋዊ ሰው(የሕብረቁምፊ ስም፣ ኢንቲ ዕድሜ) (ስም = ስም፣ ዕድሜ = ዕድሜ;)

    አሁን የተዘጋውን ስብስብ በዚህ ክፍል ውስጥ ብቻ መጠቀም እንችላለን - በእሱ ዘዴዎች ፣ ንብረቶች ፣ ግንበኞች ፣ ግን በሌላ ክፍል ውስጥ አይደለም ።

    ሰው p = አዲስ ሰው ("ቶም", 24); // ስህተት - ስብስብ ከግል ማሻሻያ ጋር ታውቋል //p.Name = "John"; ኮንሶል.WriteLine(p.ስም);

    በንብረቶች ውስጥ ማሻሻያዎችን ሲጠቀሙ ግምት ውስጥ መግባት ያለባቸው በርካታ ገደቦች አሉ-

      ንብረቱ ሁለቱም ብሎኮች ካዘጋጁ ለአንድ ስብስብ ወይም ማግኘት ብሎክ መቀየሪያ ሊዘጋጅ ይችላል።

      አንድ ስብስብ ወይም ማገጃ ብቻ የመዳረሻ መቀየሪያ ሊኖረው ይችላል፣ ግን ሁለቱም አይደሉም

      የአንድ ስብስብ ወይም የብሎክ መዳረሻ መቀየሪያ ከንብረት መዳረሻ መቀየሪያ የበለጠ ገዳቢ መሆን አለበት። ለምሳሌ፣ አንድ ንብረቱ የመቀየሪያው ይፋዊ ከሆነ፣ የስብስብ/ግኝት እገዳ መቀየሪያዎቹን ከውስጥ፣ ከውስጥ፣ ከተጠበቀው፣ ከግል ብቻ ነው ሊኖረው የሚችለው።

    ማሸግ

    ወደ ግል ክፍል ተለዋዋጮች ተደራሽነት በንብረቶች በኩል እንደሚቋቋም ከላይ አይተናል። የክፍሉን ሁኔታ ከውጭ ጣልቃ ገብነት በዚህ መንገድ መደበቅ የማሸግ ዘዴን ይወክላል ፣ይህም ከዕቃ ተኮር የፕሮግራም አወጣጥ ቁልፍ ጽንሰ-ሀሳቦች ውስጥ አንዱን ይወክላል። (የማቀፊያው ጽንሰ-ሐሳብ በጣም ጥቂት የተለያዩ ትርጓሜዎች እንዳሉት ልብ ሊባል የሚገባው ጉዳይ ነው, ሁልጊዜም እርስ በርስ አይጣመሩም) የግል መዳረሻ ማስተካከያዎችን መጠቀም ተለዋዋጭ ውጫዊ መዳረሻን ይከላከላል. መዳረሻን ለመቆጣጠር ብዙ የፕሮግራም አወጣጥ ቋንቋዎች ልዩ ዘዴዎችን ፣ ገጣሚዎችን እና ሰሪዎችን ይጠቀማሉ። በ C # ውስጥ የእነሱ ሚና አብዛኛውን ጊዜ በንብረቶች ይጫወታል.

    ለምሳሌ፣ ድምርን የሚወክል ድምር መስክ ያለው አንዳንድ የመለያ ክፍል አለ፡-

    የክፍል መለያ (የሕዝብ ድምር;)

    ድምር ተለዋዋጭው ይፋዊ ስለሆነ በፕሮግራሙ ውስጥ የትኛውም ቦታ ላይ ልናገኘው እና ልንለውጠው እንችላለን, ማንኛውንም ልክ ያልሆነ እሴት ማቀናበርን ጨምሮ, ለምሳሌ, አሉታዊ. እንዲህ ዓይነቱ ባህሪ ተፈላጊ ነው ብሎ ማሰብ የማይቻል ነው. ስለዚህ፣ የድምር ተለዋዋጭ መዳረሻን ለመገደብ እና በክፍል ውስጥ ለመደበቅ ማቀፊያ ጥቅም ላይ ይውላል፡-

    የክፍል ሒሳብ (የግል ኢንቲ ድምር፣የሕዝብ int ድምር (ማግኘት (የመመለሻ ድምር;) ስብስብ (ከሆነ (እሴት > 0) ( ድምር=እሴት፤))))

    ራስ-ሰር ባህሪያት

    ንብረቶች የአንድ ክፍል መስኮች መዳረሻን ይቆጣጠራሉ። ነገር ግን፣ ደርዘን ወይም ከዚያ በላይ መስኮች ቢኖረን፣ እያንዳንዱን መስክ መግለጽ እና አንድ አይነት ንብረት መፃፍ አሰልቺ ይሆናል። ስለዚህ, አውቶማቲክ ባህሪያት ወደ NET ማዕቀፍ ተጨምረዋል. አጭር መግለጫ አላቸው፡-

    የክፍል ሰው (የወል ሕብረቁምፊ ስም (አግኝ፤ አዘጋጅ፤) የሕዝብ int ዕድሜ (አግኝ፤ አዘጋጅ፤) የሕዝብ ሰው(የሕብረቁምፊ ስም፣ ኢንቲ ዕድሜ) (ስም = ስም፣ ዕድሜ = ዕድሜ፤))

    እንደ እውነቱ ከሆነ የንብረቶች መስኮች እንዲሁ እዚህ ተፈጥረዋል, እነሱ ብቻ በኮዱ ውስጥ በፕሮግራም አውጪው አልተፈጠሩም, ነገር ግን አቀናባሪው በሚጠናቀርበት ጊዜ በራስ-ሰር ያመነጫቸዋል.

    የራስ-ንብረቶች ጥቅማጥቅሞች ምንድ ናቸው፣ በመሠረቱ በራስ-ሰር የተፈጠረ ተለዋዋጭን ብቻ የሚደርሱ ከሆነ፣ ለምንድነው ያለራስ-ንብረቶች ተለዋዋጭን በቀጥታ አይደርሱም? እውነታው ግን በማንኛውም ጊዜ, አስፈላጊ ከሆነ, የራስ-ንብረቱን ወደ መደበኛ ንብረት ማስፋፋት እና የተወሰነ አመክንዮ መጨመር እንችላለን.

    ከመደበኛ ንብረቶች ጋር እንደሚታየው አውቶማቲክ የመጻፍ ብቻ ንብረት መፍጠር እንደማይችሉ ግምት ውስጥ ማስገባት ጠቃሚ ነው.

    አውቶማቲክ ንብረቶች ነባሪ እሴቶች ሊመደቡ ይችላሉ (ራስ-ንብረትን ማስጀመር)

    ክፍል ሰው (የወል ሕብረቁምፊ ስም (አግኝ፤ አዘጋጅ፤) = "ቶም"፤ የሕዝብ int ዕድሜ (ማግኘት፤ አዘጋጅ፤) = 23፤) ክፍል ፕሮግራም ( የማይንቀሳቀስ ባዶ ዋና(string args) ( ሰው = አዲስ ሰው () መሥሪያ .WriteLine (ሰው.ስም);

    እና ለግለሰብ ነገር የስም እና የእድሜ ንብረቶችን እሴቶች ካልገለፅን ነባሪ እሴቶች ተፈጻሚ ይሆናሉ።

    የመኪና ንብረቶች እንዲሁም የመዳረሻ ማስተካከያዎች ሊኖራቸው ይችላል፡-

    የክፍል ሰው (የወል ሕብረቁምፊ ስም (የግል ስብስብ; ያግኙ;) የህዝብ ሰው (ሕብረቁምፊ n) (ስም = n;))

    የተቀናበረውን እገዳ አስወግደን የመኪናውን ንብረት ተነባቢ-ብቻ ማድረግ እንችላለን። በዚህ ሁኔታ, የዚህን ንብረት ዋጋ ለማከማቸት, ተነባቢ ብቻ ማሻሻያ ያለው መስክ ለእሱ በተዘዋዋሪ ይዘጋጃል, ስለዚህ እንደነዚህ ያሉ ንብረቶች ከክፍል ገንቢው ሊዘጋጁ እንደሚችሉ ግምት ውስጥ ማስገባት ይገባል, ለምሳሌ በምሳሌው ውስጥ. ከላይ ወይም ንብረቱን ሲያስጀምሩ፡-

    ክፍል ሰው (የወል ሕብረቁምፊ ስም (ማግኘት;) = "ቶም")

    ለንብረቶች አጭር መግለጫ

    ልክ እንደ ዘዴዎች, ንብረቶችን ማሳጠር እንችላለን. ለምሳሌ፡-

    ክፍል ሰው (የግል የሕብረቁምፊ ስም፤ // ከሕዝብ የሕብረቁምፊ ስም ጋር እኩል የሆነ (የመመለሻ ስም;)) የህዝብ ሕብረቁምፊ ስም => ስም;)

    መስኮች እንዴት ጥቅም ላይ እንደሚውሉ ለመቆጣጠር፣ ማግኘት እና ዘዴዎችን ማዘጋጀት እና ይፋዊ ማድረግ ይችላሉ። የመስክ መዳረሻን የመቆጣጠር ችሎታ ይሰጣሉ. በተመሳሳይ ጊዜ ከክፍል ውጭ በቀጥታ እንዳይደረስበት የ Age መስክን የግል ማድረግ የተሻለ ነው.

    የህዝብ ክፍል መለያ

    የግል int ዕድሜ;

    የሕዝብ int GetAge ()

    ይህን ዘመን ይመልሱ;

    የህዝብ ባዶ SetAge (int in Age)

    ከሆነ ((በዕድሜ > 0) && (በዕድሜ< 120))

    this.age = inAge;

    አሁን የመስኩ መዳረሻን መቆጣጠር እንችላለን ነገርግን ይህ ብዙ ተጨማሪ ኮድ መጻፍ ይጠይቃል። የእድሜውን ዋጋ ለማግኘት ለተፈጠሩት ዘዴዎች መደወል ያስፈልግዎታል-

    መለያ s = አዲስ መለያ ();

    Console.WriteLine ("ዕድሜ:" + s.GetAge ());

      1. ንብረቶችን መጠቀም

    ንብረቶች የውሂብ አስተዳደርን ቀላል ያደርጉታል። የ Age ንብረቱ እንደሚከተለው ሊገለጽ ይችላል.

    የህዝብ ክፍል መለያ

    የግል int ageValue;

    ከሆነ ((እሴት > 0) && (እሴት< 120))

    የዕድሜ እሴት = ዋጋ;

    ዕድሜ መመለስ እሴት;

    እዚህ የእድሜ እሴት ንብረት ነው. ንብረቱ ዋጋውን ለመጻፍ እና ለማንበብ ክፍሎችን ያውጃል። በእነዚህ ክፍሎች ውስጥ የተገለጹት ድርጊቶች ቀደም ሲል ከተገለጹት ዘዴዎች ጋር እኩል ናቸው. በዚህ ሁኔታ, ንብረቶች ከመደበኛ መስኮች ጋር በተመሳሳይ መልኩ ጥቅም ላይ ይውላሉ.

    መለያ s = አዲስ መለያ ();

    Console.WriteLine ("ዕድሜ:" + s. ዕድሜ);

    የ Age ንብረቱ ወደ እሴት ሲዋቀር የተቀናበረው ክፍል ኮድ ይጠራል። የእሴት ቁልፍ ቃሉ በንብረቱ ላይ የተመደበውን ዋጋ ያመለክታል. የ Age ንብረቱን ዋጋ በሚያነቡበት ጊዜ, የማግኘት ክፍል ኮድ ይባላል. ይህ አቀራረብ ዘዴዎችን የመጠቀም ጥቅሞችን ያጣምራል እና ከክፍል ሜዳዎች ጋር በቀላሉ ከንብረቶች ጋር እንዲሰሩ ያስችልዎታል.

    በንብረቶች ውስጥ ያለውን የውሂብ ትክክለኛነት ማረጋገጥ . ልክ ያልሆነ የእድሜ እሴት (ለምሳሌ 150) ለማዘጋጀት ከሞከሩ, ከላይ ያለው ኮድ ትክክለኛነቱን ማረጋገጥ እና እሴቱን ውድቅ ያደርጋል (ከ120 በላይ የሆነ ማንም ሰው በባንክ አካውንት ሊኖረው አይችልም), የእርጅና እሴትን ይተዋል. አንድ ንብረት ዋጋ መሰጠቱን ለማወቅ የሚቻለው ከዚህ ተግባር በኋላ የንብረቱን ዋጋ ማረጋገጥ ነው፡-

    መለያ s = አዲስ መለያ ();

    int newAge = 150;

    ከሆነ (s.Age!= newAge)

    Console.WriteLine ("የዕድሜ ዋጋው አልተዘጋጀም");

    የሚከተለው ኮድ ዕድሜን ልክ ያልሆነ 150 እሴት ለማቀናበር ይሞክራል እና ከዚያ ዋጋ መዋቀሩን ያረጋግጣል። የ Set ዘዴ እሴቱን ለመመደብ ጥቅም ላይ ከዋለ እሴቱን ሊመልስ ይችላል የውሸት ይህ ካልተሳካ ንብረቱን መጠቀም ተጠቃሚው ትንሽ ተጨማሪ ስራ እንዲሰራ ይጠይቃል።

    የንብረት ዋጋ ለማንበብ የተለያዩ መንገዶች. ንብረቶች ሌሎች ጠቃሚ ድርጊቶችን እንዲፈጽሙ ያስችሉዎታል.

    የህዝብ int AgeInMonths

    ይህን ይመለሱ.ageValue * 12;

    አዲሱ የAgeInMonths ንብረት እዚህ ተብራርቷል። የተቀናበረ ክፍል ስለሌለው ተነባቢ-ብቻ ነው። ከእድሜ ንብረቱ ጋር ተመሳሳይ እሴት በመጠቀም የእድሜውን ዋጋ በወራት ውስጥ ይመልሳል። ይህ ማለት አንድ አይነት እሴት ለማግኘት የተለያዩ ዘዴዎችን መጠቀም ይችላሉ. ምንም እንኳን የኋለኛው እምብዛም ጥቅም ላይ ባይውልም በቀጥታ መለወጥ ሳይችል ተነባቢ-ብቻ ንብረቶችን መፍጠር ይቻላል, እንዲሁም የመጻፍ ብቻ ባህሪያትን መፍጠር ይቻላል.

    የእይታ አካላት ባህሪያት . በባንክ ሒሳብ መግለጫ ውስጥ ንብረቶችን መጠቀም ምክንያታዊ ነው, በእቃዎች ውስጥ ውሂብን መጠበቅ አለብዎት. ነገር ግን በSilverlight ውስጥ ማንኛውንም ጽሑፍ ወደ TextBlock አባል ማስገባት ይችላሉ፣ እና የገባውን እሴት ትክክለኛነት ማረጋገጥ የሚያስፈልግ አይመስልም። ይህን ኮድ ማስኬድ የእሴት ግቤት ሂደቱን ያቀዘቅዘዋል። ስለዚህ የጽሁፍ ዋጋውን ይፋዊ ሕብረቁምፊ በማድረግ ፕሮግራሙ አነስተኛ ኮድ ይይዛል እና በፍጥነት ይሰራል።

    ነገር ግን በቴክስትብሎክ ኤለመንት ውስጥ ያለውን ጽሑፍ ስንቀይር በሲልቨርላይት ገጽ ላይ ያለው ጽሑፍም እንዲለወጥ እንፈልጋለን ለምሳሌ የAdder ፕሮግራም ውጤቱን ሲያሳይ። ፕሮግራሙ በቀላሉ የመስኩን ዋጋ ከለወጠው ሲልቨርላይት በስክሪኑ ላይ ያለው መልእክት መዘመን እንዳለበት የሚያውቅበት መንገድ አይኖረውም።

    ነገር ግን ቴክስት በንብረትነት ከተሰራ የTextBlock ኤለመንት ዋጋ ሲዘምን ተዛማጁ ዘዴ ይሰራል ይህም የጽሑፍ ሳጥኑን የተከማቸ እሴት ማዘመን እና አዲሱን እሴት ለማሳየት ስክሪኑን ለማዘመን ዘዴን ሊጠራ ይችላል። ንብረቶች አንድን ነገር እሴቱ ሲቀይር የመቆጣጠር ችሎታን ይሰጣሉ። ቀላል አሰራር;

    resultTextBlock.Text = "0";

    ብዙ መቶ C # ኦፕሬሽኖችን ሊያስከትል ይችላል ምክንያቱም አዲሱን እሴት በ TextBlock ኤለመንት ውስጥ ማከማቸት የስክሪን ምስሉን ለማዘመን ስራዎችን ስለሚፈጥር።