Extension Methods for Sealed Types

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Programming languages face a dilemma known as the 'expression problem,' where it is difficult to extend both data models and virtual operations without modifying existing code, avoiding code repetition and runtime type errors, especially in compiler construction where adding new types or functions to existing frameworks is challenging.

Innovation Solution

The introduction of extension methods allows for the extension of existing types by declaring static methods that can be invoked using instance method syntax, enabling the addition of new methods to sealed, constructed, and existing types without altering existing code, using a system that includes a type component and an extensibility component to facilitate this process.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Ease of manufacture

If traditional imperative languages or modern functional languages are used, then it is easy to add new functions, but it is hard to add new types without modifying existing code

Engineering Contradiction:
Improveease of adding new functionsVSAvoidability to add new types
Core Design Contradiction:
Ease of manufactureVSAdaptability or versatility

Solution Approach 1:

The solution segments the type system and function system into independent extensible components. New types can be defined through type parameters without modifying existing function definitions, while new functions can be added through extension methods without modifying existing type definitions. This segmentation resolves the contradiction by allowing independent extension in both dimensions.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

Extension methods act as an intermediary mechanism that bridges the gap between existing types and new functionality. Instead of directly modifying types or functions, the intermediary extension method syntax allows adding functions to types through a separate declaration mechanism, resolving the expressiveness dilemma.

Inventive Principle:
Principle #24Intermediary (Mediator)

2Adaptability or versatility

If object-oriented languages are used, then it is easy to add new types, but it is hard to add new methods to existing types without modifying existing code

Engineering Contradiction:
Improveability to add new typesVSAvoidease of adding new methods
Core Design Contradiction:
Adaptability or versatilityVSEase of manufacture

Solution Approach 1:

Instead of adding methods directly to type definitions (traditional OOP approach), the invention inverts the approach by allowing method definitions to reference existing types through extension syntax. This inversion enables adding methods to sealed and constructed types without modifying their original definitions, resolving the contradiction between type extensibility and method extensibility.

Inventive Principle:
Principle #13The other way round (Inversion)

Solution Approach 2:

The invention adds a new dimension to the type-method relationship by introducing extension methods as a separate layer. Rather than extending types horizontally through inheritance or vertical modification, extension methods provide a perpendicular dimension of extensibility where methods can be added to any type without affecting the type's original structure.

Inventive Principle:
Principle #17Another dimension (Dimensionality change)

3Adaptability or versatility

If constructed types such as IEnumerable are used, then type extensibility is achieved, but it is impossible to add new methods since there is no class declaration

Engineering Contradiction:
Improvetype extensibilityVSAvoidability to add methods to constructed types
Core Design Contradiction:
Adaptability or versatilityVSEase of manufacture

Solution Approach 1:

Extension methods provide a universal mechanism that works across all type categories including constructed types, sealed types, and existing types. The same extension method syntax can be applied to any type regardless of its declaration form, making the method extension capability universal and resolving the limitation specific to constructed types.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Data Source

PatentUS7685567B2Architecture that extends types using extension methods
Publication Date: 2010.03.23 MICROSOFT TECHNOLOGY LICENSING LLC
  • US7685567B2 patent drawing
  • US7685567B2 patent drawing
  • US7685567B2 patent drawing

AI summary

Architecture that extends existing types including constructed and sealed types using extension methods. Extension methods are static methods that can be invoked using instance method syntax. Extension methods are declared by specifying the keyword “this” as a modifier on the first parameter of the methods. Extension methods have all the capabilities of regular static methods. In addition, once imported, extension methods can be invoked using instance method syntax. Also disclosed are rules for importing extension methods, and extension method invocations. Extension methods are imported through using-namespace-directives. In addition to importing the types contained in a namespace, a using-namespace-directive imports all extension methods in all static classes in the namespace. In effect, imported extension methods appear as additional methods on the types that are given by their first parameter and have lower precedence than regular instance methods.