Ένας οδηγός για την κληρονομικότητα στη σταθερότητα

1
Ένας οδηγός για την κληρονομικότητα στη σταθερότητα

Η κληρονομικότητα επιτρέπει την επαναχρησιμοποίηση του κώδικα δημιουργώντας μια νέα κλάση από μια υπάρχουσα κλάση. Η νέα κλάση που δημιουργείται είναι γνωστή ως υποδιαίρεση τάξεως (παιδική ή παράγωγη κλάση) και η υπάρχουσα κλάση από την οποία προέρχεται η θυγατρική κλάση είναι γνωστή ως υπερτάξη (γονική ή βασική τάξη).

ο is λέξη-κλειδί χρησιμοποιείται για την εκτέλεση κληρονομικότητας Solidity

contract Animal {
  // methods and fields
}

contract Cat is Animal {

  // methods and fields of Animal
  // methods and fields of Cat
}

Στο παραπάνω παράδειγμα, το συμβόλαιο Cat δημιουργείται κληρονομώντας τις μεθόδους και τα πεδία από το συμβόλαιο Animal.


ΕΝΑ παράγωγο συμβόλαιο μπορεί να φτάσει σε όλες τις μη ιδιωτικές εσωτερικές μεθόδους και καταστάσεις.

Αντικατάσταση συνάρτησης

Μπορείτε να καλέσετε τη συνάρτηση του γονικού συμβολαίου από τη σύμβαση πελάτη χρησιμοποιώντας την αντικατάσταση συνάρτησης. Αυτό μπορεί να γίνει χρησιμοποιώντας το super λέξη-κλειδί.

contract Animal {
  // methods and fields
  function run(){
  ...
  }
}

contract Cat is Animal {

  // methods and fields of Animal
  // methods and fields of Cat

  function hunt(){
  //function superseding
   super.run()
  }
}

ο super λέξη-κλειδί στο Solidity δίνει πρόσβαση στο συμβόλαιο της άμεσης μητρικής από το οποίο προκύπτει η τρέχουσα σύμβαση. Όταν έχετε ένα contract A με function f() που απορρέει από B που έχει επίσης ένα function f(), A υπερισχύει του f του B. Αυτό σημαίνει ότι myInstanceOfA.f() θα καλέσει την έκδοση του f που υλοποιείται στο εσωτερικό A η ίδια, η αρχική έκδοση υλοποιείται μέσα B δεν είναι πλέον ορατή. Η αρχική λειτουργία f από B (να εισαι Aτου γονέα) είναι επομένως διαθέσιμο στο εσωτερικό A μέσω super.f(). Εναλλακτικά, μπορεί κανείς να προσδιορίσει ρητά το γονικό του οποίου θέλει να καλέσει την παράκαμψη συνάρτησης επειδή είναι δυνατά πολλαπλά βήματα παράκαμψης, όπως επεξηγείται στο παρακάτω παράδειγμα:

pragma solidity ^0.4.5;

contract C {
  uint u;
  function f() {
    u = 1;
  }
}

contract B is C {
  function f() {
    u = 2;
  }
}

contract A is B {
  function f() {  // will set u to 3
    u = 3;
  }
  function f1() { // will set u to 2
    super.f();
  }
  function f2() { // will set u to 2
    B.f();
  }
  function f3() { // will set u to 1
    C.f();
  }
}

Αναφορά:
– https://ethereum.stackexchange.com/questions/12920/what-does-the-keyword-super-in-solidity-do
– https://www.educative.io/edpresso/what-is-inheritance-in-solidity

Schreibe einen Kommentar