Connect with us

Entwicklung & Code

Neu in .NET 10.0 [5]: Erweiterungsblöcke in C# 14.0


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Die nachträgliche Erweiterbarkeit von Klassen um zusätzliche Methoden gibt es unter dem Namen Extension Methods bereits seit der C#-Sprachversion 3.0, die im Jahr 2007 zusammen mit .NET Framework 3.5 erschien. Dies ist sogar dann möglich, wenn die Klassen bereits an anderer Stelle kompiliert wurden, wie etwa die von Microsoft bereitgestellten Bibliotheken im .NET Framework.

Weiterlesen nach der Anzeige


Der Dotnet-Doktor – Holger Schwichtenberg

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Man kann mit Extension Methods aber lediglich eine Instanzmethode zu bestehenden Klassen ergänzen. So mussten Entwicklerinnen und Entwickler zwangsweise Konstrukte, die vom Namen her eigentlich Properties waren, leidigerweise als Methoden ausdrücken, siehe IsEmptyClassic() im nächsten Listing.

In der .NET-Klassenbibliothek gibt es aus diesem Grund einige Erweiterungsmethoden, die Namen besitzen, die man intuitiv als Property erwarten würde, darunter

  • Enumerable.Count()
  • Queryable.Count()
  • Enumerable.First()
  • Enumerable.Last()

Folgender Beispielcode zeigt die klassischen Erweiterungsmethoden:


public static class StringExtensionClassic
{
   public static string TruncateClassic(this string s, int count)
   {
      if (s == null) return "";
      if (s.Length <= count) return s;
      return s.Substring(0, count) + "...";
   }

   public static bool IsEmptyClassic(this string s)
               => String.IsNullOrEmpty(s);
}


In C# 14.0 bietet Microsoft nun mit dem neuen Block-Schlüsselwort extension eine verallgemeinerte Möglichkeit der Erweiterung bestehender .NET-Klassen, die Erweiterungsblöcke (Extension Blocks) oder Erweiterungsmitglieder (Extension Members) genannt werden.

Weiterlesen nach der Anzeige

Das Schlüsselwort extension muss Teil einer statischen, nicht generischen Klasse auf der obersten Ebene sein (also keine Nested Class). Nach dem Schlüsselwort extension deklariert man den zu erweiternden Typ (Receiver). Im nächsten Listing ist der Receiver die Klasse System.String (alternativ abgekürzt durch den eingebauten Typ string). Alle Methoden und Properties innerhalb des Extension-Blocks erweitern dann den hier genannten Receiver-Typ. Aktuell kann man in diesen Extension-Blöcken folgende Konstrukte verwenden (siehe nächstes Listing):

  • Instanz-Methoden
  • Statische Methoden
  • Instanz-Properties
  • Statische Properties
  • Operatoren

Da es keine Instanzfelder (Fields) in Erweiterungsblöcken gibt, kann man mit Erweiterungsblöcken nicht den Zustand einer Klasse erweitern. Man kann nur bestehende Zustände lesen und verändern (sofern der Typ mutable ist).


Der Compiler meckert bei dem Versuch, eine Property mit Setter in einem Erweiterungsblock anzulegen.

Der Compiler meckert bei dem Versuch, eine Property mit Setter in einem Erweiterungsblock anzulegen.

Der Compiler meckert bei dem Versuch, eine Property mit Setter in einem Erweiterungsblock anzulegen.

Ein Erweiterungsblock darf beliebig viele Erweiterungsmitglieder enthalten. Eine Klasse darf mehrere Erweiterungsblöcke sowie zusätzlich auch klassische Extension Methods und andere statische Mitglieder enthalten. Das erlaubt Entwicklerinnen und Entwicklern, in bestehenden Klassen mit klassischen Erweiterungsmethoden nun noch die neuen Erweiterungsblöcke zu implementieren. Es darf auch mehrere Klassen mit Extension-Blöcken für einen Receiver-Typ geben.

Folgendes Codebeispiel zeigt die Erweiterungen für System.String mit C# 14.0:


public static class MyExtensions
{
 // NEU in C# 14.0: // NEU in C# 14.0 Erweiterungsmitglieder (Schlüsselwort extension)
 extension(System.String s) // <-- Receiver (Zielklasse). 
 {
  /// 
  /// Erweitern um eine Instanz-Methode (alternative Möglichkeit zur bisherigen Syntax)
  /// 
  public string Truncate(int count)
  {
   if (s == null) return "";
   if (s.Length <= count) return s;
   return s.Substring(0, count) + string.Dots;
  }
 
  /// 
  /// NEU: Erweitern um eine Instanz-Eigenschaft nur mit Getter 
  /// 
  public bool IsEmpty => String.IsNullOrEmpty(s);
 
  /// 
  /// NEU: Erweitern um eine Instanz-Eigenschaft mit Getter und Setter 
  /// 
  public int Size
  {
   get { return s.Length; }
   set
   {
    // Neuzuweisung geht nicht; Da Strings immutable sind, funktioniert die Setter-Logik so nicht!!!
    if (value < s.Length) s = s.Substring(0, value);
    if (value > s.Length) s = s + new string('.', value - s.Length);
   }
  }
 
  /// 
  /// NEU: Erweitern um eine statische Methode
  /// 
  public static string Create(int count, char c = '.')
  {
   return new string(c, count);
  }
 
  /// 
  /// NEU: Erweitern um eine statische Instanz-Eigenschaft
  /// 
  public static string Dots => "...";
 
  // NEU: Erweitern um eine Operatorüberladung  
  public static string operator *(string str, int i) // Operatorüberladung
  {
   return string.Concat(Enumerable.Repeat(str, i)); ;
  }
 
  // NEU: Operatorüberladung als Extension und neu ist auch, dass man ++ überladen kann
  public void operator ++()
  {
   s = s + String.Dots; // Das funktioniert so nicht, da Strings immutable sind!!!
  }
  }
}


Folgender Code zeigt den Aufruf der Erweiterungsmethoden für die Klassen String und List:


public void Run()
 {
  CUI.Demo(nameof(CS14_ExtensionDemo) + ": String");
 
  string s1 = "Hallo Holger";
  Console.WriteLine($"Vorher: {s1}");
  string s2 = s1.TruncateClassic(5);
  Console.WriteLine($"Nach TruncateClassic(): {s1}"); // Hello...
  Console.WriteLine($"IsEmptyClassic():{s2.IsEmptyClassic()}"); // false
 
  string s3 = "Hallo Holger";
  Console.WriteLine($"Vorher: {s3}");
  string s4 = s3.Truncate(5);
  Console.WriteLine($"Nach Truncate(): {s4}"); // Hello...
  Console.WriteLine($"IsEmpty:{s4.IsEmpty}"); // false
 
  string s5 = (s1 + "! ") * 3; 
  Console.WriteLine($"*3: {s5}"); // "Hallo Holger!Hallo Holger!Hallo Holger!"
 
  string s6 = string.Create(5, '#');
  Console.WriteLine($"string.Create(5, '#'): {s6}"); // "#####"
 
  #region nicht möglich
  CUI.H2("s1.Size = 5 --> das geht nicht, weil die Size Property versucht, die Zeichenkette neu zuzuweisen!");
  // Das geht nicht, weil die Size Property versucht, die Zeichenkette neu zuzuweisen!
  s1.Size = 5;
  Console.WriteLine(s1); // "Hallo Holger" statt wie erwartet "Hallo"
  s1++;
  Console.WriteLine(s1); // "Hallo Holger" statt wie erwartet "Hallo Holger..."
  #endregion
 }



Ausgabe des Beispielcodes

Ausgabe des Beispielcodes

Ausgabe des Beispielcodes


(rme)



Source link

Entwicklung & Code

Meta trennt sich von React und übergibt es der Linux Foundation


Die React Foundation hat offiziell ihre Arbeit aufgenommen. Wie das Team mitteilt, steht das Projekt nun unter dem organisatorischen Dach der Linux Foundation.

Weiterlesen nach der Anzeige

Bereits im Oktober 2025 hatten die Verantwortlichen angekündigt, eine eigenständige Stiftung gründen zu wollen. Mit dem Start geht React inklusive React Native und begleitender Technologien wie JSX formal in den Besitz der neuen, unabhängigen Organisation über – und ist damit nicht länger Eigentum von Meta.

Zum Kreis der Platinum-Gründungsmitglieder zählen Amazon, Callstack, Expo, Huawei, Meta, Microsoft, Software Mansion und Vercel. Huawei ist seit der Ankündigung im Herbst hinzugekommen. Die Stiftung wird von einem Board gesteuert, in dem die Mitgliedsunternehmen vertreten sind. Als Executive Director fungiert Seth Webster.

Die technische Weiterentwicklung bleibt davon getrennt. Das React-Team betont, dass strategische Technologieentscheidungen weiterhin von den Maintainern sowie aktiven Beitragenden getroffen werden – unabhängig vom Stiftungsboard.

Um die künftige technische Governance auszuarbeiten, hat das Projekt einen vorläufigen Leadership Council eingesetzt. Dieses Gremium soll in den kommenden Monaten ein dauerhaftes Modell für Entscheidungsprozesse und Verantwortlichkeiten definieren.

Weiterlesen nach der Anzeige




(Bild: jaboy/123rf.com)

Tools und Trends in der JavaScript-Welt: Die enterJS 2026 wird am 16. und 17. Juni in Mannheim stattfinden. Das Programm dreht sich rund um JavaScript und TypeScript, Frameworks, Tools und Bibliotheken, Security, UX und mehr. Frühbuchertickets sind im Online-Ticketshop erhältlich.

Parallel läuft die organisatorische Migration: Repositorys, Websites und weitere Infrastruktur sollen schrittweise auf die React Foundation übergehen. Darüber hinaus plant die Stiftung Programme zur Unterstützung des Ökosystems und startet die Vorbereitungen für die nächste React Conf. Nähere Informationen finden sich im Beitrag auf dem React-Blog.


(mdo)



Source link

Weiterlesen

Entwicklung & Code

Claude Code für Modernisierung von COBOL-Systemen: Schwarzer Tag für IBM-Aktie


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Offenbar, weil die KI Claude Code von Anthropic besonders zeitaufwendige Prozesse bei der Aktualisierung von Quellcode in COBOL übernehmen kann, ist der Aktienkurs von IBM am Montag um mehr als 13 Prozent eingebrochen. In einem Blogeintrag hatte das KI-Unternehmen erläutert, dass die eigene Technik die langwierige Erkundungs- und Analysearbeit automatisieren kann, die vor einer Migration durchgeführt werden muss. Dank der KI könne eine COBOL-Codebasis jetzt in einem Zeitraum von Quartalen modernisiert werden, während das bislang Jahre dauerte. Für die IBM-Aktien folgte der schlimmste Börsentag seit mehr als 25 Jahren, und allein im Februar hat die Aktie des Konzerns damit jetzt mehr als 26 Prozent an Wert verloren.

Weiterlesen nach der Anzeige

COBOL läuft noch immer auf zahlreichen Mainframes, die insbesondere bei Banken, im Gesundheitswesen und Einzelhandel wegen ihrer hohen Zuverlässigkeit im Einsatz sind. Die meisten dieser Großrechner stammen von IBM, der US-Konzern macht damit einen signifikanten Teil seines Umsatzes. Die Modernisierung eines solchen Systems „erforderte früher ganze Heerscharen von Beratern, die jahrelang damit beschäftigt waren, Arbeitsabläufe abzubilden“, schreibt Anthropic jetzt. Nur wenige seien deshalb bereit gewesen, die hohen Kosten zu tragen. Genau diese kostenintensiven Teile einer Modernisierung könne Claude Code jetzt erledigen, während Menschen die Aufsicht und Kontrolle übernehmen müssen.

Trotzdem bleibt das Ausmaß des Ausverkaufs jetzt überraschend. IBM selbst hat schon vor zweieinhalb Jahren einen KI-Assistenten für die effizientere Übersetzung von COBOL in Java vorgestellt, um die Modernisierung von Mainframe-Anwendungen voranzutreiben. Erst im Sommer 2025 hat der IBM-CEO erklärt, dass das Werkzeug weite Verbreitung gefunden habe. Unternehmen würden es benutzen, um die Millionen Zeilen an Quellcode in ihren Systemen zu verstehen und damit entscheiden zu können, was sinnvollerweise modernisiert werden sollte. Gegenüber Bloomberg weist ein Analyst darauf hin, dass Mainframes also längst effizienter modernisiert werden könnten, die Betreiber das aber nicht angehen würden.

COBOL (Common Business Oriented Language) wurde in den 1950er-Jahren entwickelt und kommt heute nur noch selten zum Einsatz. Gleichzeitig handelt es sich dabei aber um besonders wichtige Systeme, die nicht einfach durch neuere Alternativen ersetzt werden können. Damit bedeuten die Mainframes für Unternehmen aber auch immense „technische Schulden“, die hohe Kosten verursachen. Gleichzeitig erschweren sie zunehmend den Zugriff auf Daten sowie die Integration moderner Technik. Zudem gibt es immer weniger Entwickler und Entwicklerinnen für COBOL, weshalb erfahrene Teams für viel Geld vorgehalten werden müssen. Hier vermuten Anleger und Anlegerinnen für KI-Technik wie Claude Code wohl ein großes Einsparpotenzial.


(mho)



Source link

Weiterlesen

Entwicklung & Code

Mozilla führt Kill-Switch für alle KI-Features in Firefox 148 ein


Mozilla hat Firefox 148 veröffentlicht. Die neue Version bringt als wichtigste Neuerung eine zentrale Verwaltungsseite für alle KI-Funktionen des Browsers. Der Toggle „KI-Verbesserungen blockieren“ ist standardmäßig aktiviert und verhindert Pop-ups sowie Eingabeaufforderungen für KI-Funktionen.

Weiterlesen nach der Anzeige

Der neue Bereich „KI-Steuerung“ in den Einstellungen erlaubt eine granulare Steuerung einzelner Features. Nutzer können für jede Funktion zwischen drei Zuständen wählen: „Verfügbar“ macht Features sichtbar und nutzbar, „Aktiviert“ aktiviert sie per Opt-in, während „Blockiert“ sie komplett ausblendet und bei On-Device-Modellen die lokal gespeicherten Daten löscht. Zu den steuerbaren Funktionen zählen Übersetzungen, automatische Bildbeschreibungen in PDFs, Link-Previews sowie Chatbots von Anthropic Claude, ChatGPT, Microsoft Copilot, Google Gemini und Le Chat Mistral. Die Einstellungen bleiben über Updates hinweg erhalten.

Mozilla hat außerdem Remote-Browser-Änderungen von der Telemetrie entkoppelt. Nutzer erhalten nun Konfigurations-Updates, ohne dass sie Nutzungsdaten teilen oder an experimentellen Studien teilnehmen müssen. Die Windows-10-Version unterstützt jetzt Firefox Backup auch für Nutzer, die in den Einstellungen „Die Chronik löschen, wenn Firefox geschlossen wird“ aktiviert haben – die Backups schließen dabei keine zur Löschung vorgesehenen Daten ein.

Bei den Übersetzungsfunktionen unterstützt Firefox 148 jetzt Chinesisch (Traditionell) in beide Richtungen sowie das Vietnamesische. Die Verbesserungen für Screenreader betreffen die Darstellung mathematischer Formeln in PDF-Dokumenten. Ein Fix behebt das Problem, dass Sprachpakete nach einem Major-Update deaktiviert wurden. Unter Windows funktioniert auch das Drag-and-Drop von heruntergeladenen Bildern in Adobe Illustrator korrekt – es wird das Bild eingefügt, nicht mehr die URL.

Für Webentwickler bringt Firefox 148 Unterstützung für WebGPU in Service Workern. Die GPU-beschleunigte Grafikschnittstelle steht damit in allen Worker-Kontexten zur Verfügung und ermöglicht rechenintensive Operationen im Hintergrund – etwa für Browser-Erweiterungen oder für Tabs, die sich Ressourcen über verschiedene Zeiträume hinweg teilen müssen.

Mit der Trusted Types API integriert Mozilla einen wichtigen Sicherheitsmechanismus gegen Cross-Site-Scripting-Angriffe. Die API erzwingt, dass Eingaben eine Transformation durchlaufen, bevor sie in kritische DOM-Sinks wie innerHTML gelangen. Entwickler aktivieren den Schutz per Content-Security-Policy-Header. Ergänzend steht die Sanitizer API bereit, die mit Methoden wie element.setHTML() und document.parseHTML() eine sichere HTML-Manipulation ermöglicht. Die konfigurierbaren Funktionen können Bibliotheken von Dritten wie DOMPurify ersetzen.

Weiterlesen nach der Anzeige

Für JavaScript-Entwickler bringt die neue Version die Unterstützung für Iterator.zip() und Iterator.zipKeyed() aus dem Joint Iteration Proposal. Die Methoden ermöglichen es, mehrere Iteratoren zu gruppierten Werten zu kombinieren – ähnlich wie die gleichnamigen Funktionen in anderen Programmiersprachen.

Im CSS-Bereich führt Mozilla die Property position-try-order ein, die beim CSS Anchor Positioning die Reihenfolge von Fallback-Positionierungsversuchen steuert, wenn Elemente über den Viewport hinausragen würden. Die neue shape()-Funktion erlaubt das Definieren responsiver Freiform-Shapes etwa für clip-path. Im Gegensatz zur path()-Funktion unterstützt shape() CSS-Units und mathematische Funktionen, was die Handhabung vereinfacht.

Weitere Neuerungen für Entwickler umfassen location.ancestorOrigins sowie NavigationPrecommitController.addHandler() aus der Navigation API. Das initiale about:blank-Dokument ist nun Web-kompatibel ausgeführt – synchron und ohne zweites Parser-Dokument.

Die Einführung der zentralen KI-Kontrolle ist eine Reaktion auf Kontroversen um die KI-Strategie von Mozilla. Im Dezember 2025 hatte CEO Anthony Enzor-DeMeo seine Vision eines „modernen KI-Browsers“ vorgestellt, was nicht zuletzt bei datenschutzbewussten Nutzern Befürchtungen über Datenabflüsse an KI-Dienste von Drittanbietern auslöste.

Details zu allen Änderungen finden sich in den offiziellen Release Notes.


(fo)



Source link

Weiterlesen

Beliebt