-
bitcoin $102945.910547 USD
-3.44% -
ethereum $3420.839781 USD
-5.21% -
tether $0.999760 USD
-0.02% -
xrp $2.388368 USD
-6.11% -
bnb $959.903513 USD
-4.27% -
solana $154.081730 USD
-9.51% -
usd-coin $0.999890 USD
-0.03% -
tron $0.298739 USD
0.34% -
dogecoin $0.171528 USD
-6.07% -
cardano $0.556416 USD
-7.29% -
hyperliquid $38.954447 USD
-6.51% -
chainlink $15.307416 USD
-7.65% -
bitcoin-cash $505.168764 USD
-3.53% -
stellar $0.281548 USD
-7.02% -
unus-sed-leo $9.208047 USD
-0.39%
Wie funktioniert die Vererbung in Solidity-Smart-Verträgen?
Solidity inheritance enables code reuse and modularity through virtual functions, multiple inheritance, and abstract contracts, but requires careful design to avoid gas costs and conflicts.
Nov 11, 2025 at 10:40 pm
Vererbung in Solidität: Aufbau modularer Smart Contracts
1. Durch die Vererbung in Solidity kann ein Vertrag die Eigenschaften und Funktionen eines anderen Vertrags übernehmen, was die Wiederverwendung von Code und ein strukturiertes Design ermöglicht. Ein abgeleiteter Vertrag kann von einem Basisvertrag erben und erhält Zugriff auf dessen Zustandsvariablen, Funktionen und Modifikatoren, sofern diese nicht als privat markiert sind. Dieser Mechanismus unterstützt die hierarchische Organisation der Logik und reduziert die Redundanz über mehrere Verträge hinweg.
2. Wenn ein Vertrag von einem anderen Vertrag erbt, kann er das geerbte Verhalten erweitern oder ändern. Beispielsweise kann ein untergeordneter Vertrag Funktionen des übergeordneten Vertrags überschreiben, indem er das Schlüsselwort virtual in der Basisfunktion und das Schlüsselwort override in der abgeleiteten Funktion verwendet. Dies ermöglicht polymorphes Verhalten, bei dem über Vertragsschichten hinweg unterschiedliche Implementierungen derselben Funktionssignatur vorhanden sein können.
3. In Solidity wird die Mehrfachvererbung unterstützt, sodass ein Vertrag von mehr als einem übergeordneten Element erben kann. Die Reihenfolge der Vererbung ist aufgrund des C3-Linearisierungsalgorithmus wichtig, den Solidity zum Auflösen von Funktionsaufrufen verwendet. Die zuerst aufgeführten Verträge haben bei der Methodenauflösung Vorrang, was dazu beiträgt, Mehrdeutigkeiten zu vermeiden, wenn überlappende Funktionen in den übergeordneten Elementen vorhanden sind.
4. Konstruktoren in geerbten Verträgen werden in der Reihenfolge der Vererbung ausgeführt, beginnend mit dem Vertrag auf der untersten Ebene und nach unten zu den abgeleiteten Verträgen. Jeder Konstruktor muss explizit aufgerufen werden, wenn Argumente erforderlich sind, um eine ordnungsgemäße Initialisierung der Zustandsvariablen auf jeder Ebene des Vererbungsbaums sicherzustellen.
5. Sichtbarkeit spielt bei der Vererbung eine entscheidende Rolle. Öffentliche und interne Funktionen sind für abgeleitete Verträge zugänglich, während private Funktionen auf ihren definierenden Vertrag beschränkt bleiben. Interne Funktionen können überschrieben werden, was Flexibilität bei der Anpassung bietet, während externe Funktionen nicht überschrieben werden können, da sie nur außerhalb des Vertragskontexts aufgerufen werden können.
Funktionsüberschreibung und virtuelle Methoden
1. Damit eine Funktion in einem abgeleiteten Vertrag überschrieben werden kann, muss sie im Basisvertrag als virtuell deklariert werden. Dies signalisiert, dass die Implementierung der Funktion möglicherweise in untergeordneten Verträgen ersetzt wird. Ohne dieses Schlüsselwort bleibt die Funktion in Unterklassen fest und unveränderlich.
2. Der übergeordnete Vertrag muss beim Neudefinieren einer virtuellen Funktion das Schlüsselwort override verwenden. Dies erzwingt eine explizite Absicht und verhindert versehentliche Überschreibungen. Wenn eine Funktion versucht, eine Überschreibung durchzuführen, ohne eine Überschreibung zu deklarieren, gibt der Compiler einen Fehler aus.
3. Beim Überschreiben muss die Funktionssignatur – einschließlich Name, Parameter und Rückgabetypen – genau mit dem Original übereinstimmen. Modifikatoren wie Sichtbarkeit (öffentlich, intern) müssen ebenfalls kompatibel sein, eine strengere Sichtbarkeit (z. B. Reduzierung von öffentlich auf intern) ist jedoch nicht zulässig.
4. Es ist möglich, die übergeordnete Version einer überschriebenen Funktion mit super aufzurufen. Dieses Schlüsselwort leitet den Aufruf durch die Vererbungshierarchie und ruft die nächstgelegene Implementierung der Funktion auf. Alternativ kann die BaseContractName.functionName() -Syntax die Methode eines bestimmten Vorfahren direkt aufrufen.
5. Das Überschreiben von Modifikatoren folgt ähnlichen Regeln. Ein Modifikator kann als virtuell deklariert und dann in einem abgeleiteten Vertrag überschrieben werden. Dadurch ist es möglich, auf Funktionen angewendete Vor- oder Nachbedingungen zu ändern und die Zugriffskontrolle oder Ausführungslogik kontextabhängig anzupassen.
Abstrakte Verträge und Schnittstellen
1. Abstrakte Verträge sind unvollständige Verträge, die eine oder mehrere Funktionen ohne Implementierung enthalten. Sie werden mit dem Schlüsselwort abstract deklariert und dienen als Vorlage für andere Verträge, auf denen aufgebaut werden kann. Jeder Vertrag, der von einem abstrakten Vertrag erbt, muss alle nicht implementierten Funktionen implementieren oder selbst als abstrakt gekennzeichnet werden.
2. Funktionen innerhalb eines abstrakten Vertrags, denen ein Körper fehlt, gelten automatisch als abstrakt und müssen von jedem nicht abstrakten untergeordneten Element implementiert werden. Diese Funktionen definieren eine erforderliche Schnittstelle, die Nachkommen einhalten müssen, um die Konsistenz über Implementierungen hinweg sicherzustellen.
3. Schnittstellen gehen die Abstraktion weiter, indem sie Verträge darauf beschränken, nur Funktionsdeklarationen (ohne Körper), Ereignisse und Strukturen zu enthalten. Alle Funktionen in einer Schnittstelle sind implizit extern und können keine Statusvariablen haben. Ein Vertrag implementiert eine Schnittstelle, indem er konkrete Definitionen für alle ihre Funktionen bereitstellt.
4. Ein einzelner Vertrag kann mehrere Schnittstellen implementieren und verschiedene standardisierte Verhaltensweisen wie ERC-20, ERC-721 oder benutzerdefinierte Protokollspezifikationen kombinieren. Dies fördert die Interoperabilität und die Einhaltung allgemein anerkannter Standards im Ethereum-Ökosystem.
5. Da Schnittstellen keine Konstruktoren enthalten oder von regulären Verträgen erben können, eignen sie sich am besten zum Definieren von Kommunikationsgrenzen zwischen Verträgen, anstatt wiederverwendbare Geschäftslogik zu kapseln. Ihre Unveränderlichkeit macht sie ideal für vertragsübergreifende Interaktionsgarantien.
Häufige Fallstricke und Best Practices
1. Eine falsche Reihenfolge der übergeordneten Verträge während der Mehrfachvererbung kann aufgrund der C3-Linearisierungsregeln zu unerwartetem Verhalten führen. Entwickler sollten Basisverträge in absteigender Reihenfolge ihrer Priorität auflisten, um eine korrekte Methodenauflösung sicherzustellen und stille Fehler zu vermeiden.
2. Der übermäßige Einsatz tiefer Vererbungsbäume kann die Lesbarkeit beeinträchtigen und die Bereitstellungskosten erhöhen. Flachere Strukturen mit fokussierten, zweckgebundenen Verträgen erweisen sich häufig als wartbarer und gaseffizienter als komplexe Hierarchien.
3. Das Versäumnis, überschreibbare Funktionen als virtuell zu kennzeichnen, verhindert eine Verlängerung in untergeordneten Verträgen und schränkt die Flexibilität ein. Umgekehrt kann das Markieren zu vieler Funktionen ohne Notwendigkeit als virtuell dazu führen, dass unbeabsichtigte Änderungspunkte offengelegt werden und möglicherweise die Sicherheit gefährdet wird.
4. Nichtübereinstimmungen der Konstruktorargumente in geerbten Ketten führen zu Kompilierungsfehlern. Jeder Konstruktor im Vererbungspfad muss die entsprechende Anzahl und Art von Argumenten erhalten, die während der Vertragsinstanziierung explizit übergeben werden.
5. Wenn man sich bei der Wiederverwendung von Code ausschließlich auf die Vererbung verlässt, werden möglicherweise Alternativen wie Bibliotheken oder Zusammensetzbarkeitsmuster außer Acht gelassen. Die Verwendung von Using for -Anweisungen oder Delegate-Aufrufen kann in bestimmten Szenarien sicherere und modularere Lösungen bieten.
Häufig gestellte Fragen
Was passiert, wenn zwei übergeordnete Verträge eine Funktion mit demselben Namen definieren? Solidität erfordert, dass solche Konflikte explizit im Kindervertrag gelöst werden. Der Entwickler muss die Funktion überschreiben und entscheiden, wie mit der Mehrdeutigkeit umgegangen werden soll, typischerweise durch Aufrufen einer der übergeordneten Versionen über Super- oder Direktqualifizierung.
Kann ein Vertrag sowohl von einem regulären Vertrag als auch von einer Schnittstelle erben? Ja. Ein Vertrag kann aus mehreren Quellen erben, einschließlich einer Mischung aus konkreten Verträgen, abstrakten Verträgen und Schnittstellen. Es gelten die gleichen Vererbungsregeln, wobei Schnittstellen nur Funktionssignaturen beisteuern, die implementiert werden müssen.
Kann man verhindern, dass ein Vertrag vererbt wird? Solidity bietet kein integriertes Schlüsselwort wie „final“, um die Vererbung zu blockieren. Entwickler können jedoch Verträge mit privaten Konstrukteuren entwerfen oder die Funktionalität auf eine Weise einschränken, die die Vererbung unpraktisch oder ineffektiv macht.
Wie wirkt sich die Vererbung auf die Gaskosten während des Einsatzes aus? Geerbter Code erhöht die Bytecodegröße des resultierenden Vertrags, was sich direkt auf die Bereitstellungskosten auswirkt. Funktionen aus Basisverträgen werden in den endgültigen Bytecode kopiert, sofern keine externen Bibliotheken verwendet werden, wodurch die Bereitstellung großer Vererbungsbäume teurer wird.
Haftungsausschluss:info@kdj.com
Die bereitgestellten Informationen stellen keine Handelsberatung dar. kdj.com übernimmt keine Verantwortung für Investitionen, die auf der Grundlage der in diesem Artikel bereitgestellten Informationen getätigt werden. Kryptowährungen sind sehr volatil und es wird dringend empfohlen, nach gründlicher Recherche mit Vorsicht zu investieren!
Wenn Sie glauben, dass der auf dieser Website verwendete Inhalt Ihr Urheberrecht verletzt, kontaktieren Sie uns bitte umgehend (info@kdj.com) und wir werden ihn umgehend löschen.
-
XNO Jetzt handeln$1.54
28.84%
-
TAKE Jetzt handeln$0.3005
28.29%
-
LSK Jetzt handeln$0.3855
25.45%
-
OMI Jetzt handeln$0.0002084
23.15%
-
ELIZAOS Jetzt handeln$0.01028
21.88%
-
PTB Jetzt handeln$0.03509
21.71%
- XRP ETF genehmigt, Bitcoin stabilisiert sich, Krypto-Updates: Wie geht es weiter?
- 2025-11-12 19:00:00
- Evercade Alpha Taito Edition: Bartop-Gigant oder überflüssiger Retro?
- 2025-11-12 19:15:02
- Zcash im Jahr 2025: Kaufen, Hodl oder Bye-Bye?
- 2025-11-12 19:00:02
- Geprüfter Vorverkauf von XRP Tundra: Auf der Welle der Transparenz in Krypto reiten
- 2025-11-12 19:00:02
- MEXC, Chiliz, CHZ Frenzy: Eine Millionen-Dollar-Fan-Fiesta!
- 2025-11-12 19:05:01
- Bitwise, Chainlink und die ETF-Grenze: Eine New Yorker Minute zum nächsten großen Ding der Kryptowährung
- 2025-11-12 19:20:02
Verwandtes Wissen
Was ist ein Denial-of-Service-Angriff (DoS) in einem Smart Contract und was sind seine häufigsten Formen?
Nov 10,2025 at 05:20am
Denial of Service in Smart Contracts verstehen 1. Ein Denial-of-Service-Angriff (DoS) im Zusammenhang mit Smart Contracts bezieht sich auf ein Szenari...
Wofür wird eine kryptografische Nonce beim Signieren von Transaktionen verwendet?
Nov 11,2025 at 05:59am
Kryptografische Nonces in Blockchain-Transaktionen verstehen 1. Eine kryptografische Nonce ist eine Zufalls- oder Pseudozufallszahl, die nur einmal im...
Wie funktioniert die Vererbung in Solidity-Smart-Verträgen?
Nov 11,2025 at 10:40pm
Vererbung in Solidität: Aufbau modularer Smart Contracts 1. Durch die Vererbung in Solidity kann ein Vertrag die Eigenschaften und Funktionen eines an...
Was ist ein Minimal-Proxy-Vertrag (EIP-1167) und wie spart er bei der Bereitstellung Gas?
Nov 12,2025 at 11:39am
Was ist ein Minimal-Proxy-Vertrag (EIP-1167)? 1. Ein Minimal-Proxy-Vertrag, standardisiert im Ethereum Improvement Proposal (EIP) 1167, ist ein einfac...
Was ist eine Bibliothek in Solidity und wie unterscheidet sie sich von einem Basisvertrag?
Nov 12,2025 at 09:19am
Bibliotheken in Solidität verstehen 1. Eine Bibliothek in Solidity ist ein spezieller Vertragstyp, der wiederverwendbare Funktionen enthält, die von m...
Wie sendet man Ether sicher an einen anderen Vertrag?
Nov 09,2025 at 06:40pm
Senden von Ether an Smart Contracts: Wichtige Überlegungen 1. Stellen Sie sicher, dass der empfangende Vertrag über eine kostenpflichtige Fallback-Fun...
Was ist ein Denial-of-Service-Angriff (DoS) in einem Smart Contract und was sind seine häufigsten Formen?
Nov 10,2025 at 05:20am
Denial of Service in Smart Contracts verstehen 1. Ein Denial-of-Service-Angriff (DoS) im Zusammenhang mit Smart Contracts bezieht sich auf ein Szenari...
Wofür wird eine kryptografische Nonce beim Signieren von Transaktionen verwendet?
Nov 11,2025 at 05:59am
Kryptografische Nonces in Blockchain-Transaktionen verstehen 1. Eine kryptografische Nonce ist eine Zufalls- oder Pseudozufallszahl, die nur einmal im...
Wie funktioniert die Vererbung in Solidity-Smart-Verträgen?
Nov 11,2025 at 10:40pm
Vererbung in Solidität: Aufbau modularer Smart Contracts 1. Durch die Vererbung in Solidity kann ein Vertrag die Eigenschaften und Funktionen eines an...
Was ist ein Minimal-Proxy-Vertrag (EIP-1167) und wie spart er bei der Bereitstellung Gas?
Nov 12,2025 at 11:39am
Was ist ein Minimal-Proxy-Vertrag (EIP-1167)? 1. Ein Minimal-Proxy-Vertrag, standardisiert im Ethereum Improvement Proposal (EIP) 1167, ist ein einfac...
Was ist eine Bibliothek in Solidity und wie unterscheidet sie sich von einem Basisvertrag?
Nov 12,2025 at 09:19am
Bibliotheken in Solidität verstehen 1. Eine Bibliothek in Solidity ist ein spezieller Vertragstyp, der wiederverwendbare Funktionen enthält, die von m...
Wie sendet man Ether sicher an einen anderen Vertrag?
Nov 09,2025 at 06:40pm
Senden von Ether an Smart Contracts: Wichtige Überlegungen 1. Stellen Sie sicher, dass der empfangende Vertrag über eine kostenpflichtige Fallback-Fun...
Alle Artikel ansehen














