-
bitcoin $77146.398531 USD
-0.23% -
ethereum $2514.088317 USD
-0.37% -
tether $0.999674 USD
0.00% -
bnb $722.500739 USD
-1.34% -
xrp $1.361192 USD
-0.23% -
usd-coin $0.999776 USD
-0.01% -
solana $101.320251 USD
-0.42% -
tron $0.339801 USD
0.16% -
hyperliquid $78.899137 USD
-0.02% -
zcash $1141.149289 USD
-0.18% -
dogecoin $0.084480 USD
-0.05% -
monero $530.834712 USD
-1.66% -
chainlink $11.453705 USD
-0.73% -
unus-sed-leo $9.056535 USD
-0.61% -
cardano $0.207439 USD
-0.31%
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.
-
FIL Jetzt handeln$0.9296
15.04%
-
BSV Jetzt handeln$17.33
5.12%
-
CRV Jetzt handeln$0.3520
4.55%
-
JST Jetzt handeln$0.1126
3.52%
-
INJ Jetzt handeln$6.12
2.65%
-
STABLE Jetzt handeln$0.02835
2.51%
- Japan, XRP und die XRP-Armee: Eine stille Revolution im globalen Finanzwesen?
- 2026-09-13 20:35:02
- Unbestätigter Buzz: Chainlink Whales, 10M LINK und die 17 %-Korrektur – Was ist wirklich los?
- 2026-09-13 16:55:01
- Cardano-Preisvorhersage, -analyse und -bewegung: Marktvolatilität und Zukunftspotenzial steuern
- 2026-09-13 16:25:01
- Datenverstoß bei Revolut: Gefälschte Regierungsanfragen nutzen Sicherheitslücken aus und legen Kundendaten offen
- 2026-09-13 09:00:02
- Blockstream, Liquid Network, Bitcoin: Streit um „gestohlene“ Gelder
- 2026-09-13 08:35:01
- Der Umlauf von Ripple RLUSD erreicht 2,4 Milliarden US-Dollar: Ein genauerer Blick auf die Entwicklung des Stablecoins
- 2026-09-13 04:50:01
Verwandtes Wissen
Wie überprüft man das Futures-Volumen und das Open Interest von DOGE?
Sep 12,2026 at 08:39am
Verständnis des DOGE Futures-Volumens 1. Das Futures-Volumen bezieht sich auf die Gesamtzahl der DOGE Futures-Kontrakte, die innerhalb eines bestimmte...
Wie kann man das BTC-Futures-Volumen und das Open Interest überprüfen?
Sep 12,2026 at 03:19pm
Datenquellen für BTC-Futures-Metriken 1. CoinGlass API v4 liefert Echtzeit-Finanzierungsraten, Liquidations-Heatmaps und detaillierte Aufschlüsselunge...
Wie liest man das DOGEUSDT Perpetual Contract Chart?
Sep 11,2026 at 07:19pm
Preisbewegungen auf DOGEUSDT Perpetual Charts verstehen 1. Die Candlestick-Formation verrät die unmittelbare Marktstimmung – grüne Kerzen zeigen eine ...
Wie liest man das ETHUSDT-Futures-Chart auf Binance?
Sep 13,2026 at 05:20am
Bitcoin Halbierungsmechanik 1. Alle 210.000 Blöcke wird die Blockbelohnung für Bitcoin Miner halbiert. 2. Dieses Ereignis tritt etwa alle vier Jahre a...
Wie kann ich die Bitcoin Futures-Finanzierungsgebühr auf Binance überprüfen?
Sep 13,2026 at 06:00pm
Bitcoin Halbierungsmechanik 1. Das Protokoll von Bitcoin erzwingt einen festen Ausgabeplan, bei dem die Blockbelohnungen etwa alle 210.000 Blöcke halb...
Wie kann ich die Finanzierungsgebühr für BTC-Futures auf Binance überprüfen?
Sep 10,2026 at 08:00am
Auffinden der Anzeige der Förderrate 1. Navigieren Sie zur Handelsoberfläche von Binance Futures und wählen Sie den unbefristeten BTCUSDT-Kontrakt aus...
Wie überprüft man das Futures-Volumen und das Open Interest von DOGE?
Sep 12,2026 at 08:39am
Verständnis des DOGE Futures-Volumens 1. Das Futures-Volumen bezieht sich auf die Gesamtzahl der DOGE Futures-Kontrakte, die innerhalb eines bestimmte...
Wie kann man das BTC-Futures-Volumen und das Open Interest überprüfen?
Sep 12,2026 at 03:19pm
Datenquellen für BTC-Futures-Metriken 1. CoinGlass API v4 liefert Echtzeit-Finanzierungsraten, Liquidations-Heatmaps und detaillierte Aufschlüsselunge...
Wie liest man das DOGEUSDT Perpetual Contract Chart?
Sep 11,2026 at 07:19pm
Preisbewegungen auf DOGEUSDT Perpetual Charts verstehen 1. Die Candlestick-Formation verrät die unmittelbare Marktstimmung – grüne Kerzen zeigen eine ...
Wie liest man das ETHUSDT-Futures-Chart auf Binance?
Sep 13,2026 at 05:20am
Bitcoin Halbierungsmechanik 1. Alle 210.000 Blöcke wird die Blockbelohnung für Bitcoin Miner halbiert. 2. Dieses Ereignis tritt etwa alle vier Jahre a...
Wie kann ich die Bitcoin Futures-Finanzierungsgebühr auf Binance überprüfen?
Sep 13,2026 at 06:00pm
Bitcoin Halbierungsmechanik 1. Das Protokoll von Bitcoin erzwingt einen festen Ausgabeplan, bei dem die Blockbelohnungen etwa alle 210.000 Blöcke halb...
Wie kann ich die Finanzierungsgebühr für BTC-Futures auf Binance überprüfen?
Sep 10,2026 at 08:00am
Auffinden der Anzeige der Förderrate 1. Navigieren Sie zur Handelsoberfläche von Binance Futures und wählen Sie den unbefristeten BTCUSDT-Kontrakt aus...
Alle Artikel ansehen














