Department of Computer Science

Laboratory for Software Design

Eos: A Unified Aspect-oriented Extension of C#

Got a question?

Got a question or comment? Contact us at (515) 294-6168 or

The Eos Programming Guide (Under Construction)

Eos is an aspect-oriented extension to C# programming language for Microsoft® .NET Framework™. Its programming language model is based on AspectJ-like languages. It supports modularization of crosscutting concerns by adding three constructs to C#. A concern is a dimension in which some design decision is made. Some examples of concerns are execution trace policy, use of common thread pool, security policy enforcement, caching etc. A concern is crosscutting if it cannot be realized in traditional object-oriented designs in a modular way that is, if any implementation of the concern involves scattered and tangled code. Scattered means not localized in a module but fragmented across a system. Tangled means mingled with code for other concerns. For example, the implementation of execution trace policy is scattered across all methods of the system and tangled with the concerns implemented by the methods.

The language model of Eos adds three new constructs to C#: pointcuts, bindings, and inter-type declarations. The pointcut and inter-type declarations are similar to their counterpart in AspectJ. The pointcut select points in the execution of a program. These points are called join points in aspect-oriented terminology. The binding construct connects the join points to methods. Whenever the join point is reached in the program execution, the bound method is executed. The binding construct uses the pointcut construct to select a set of join points to connect a method. The inter-type declaration allows a third party type to add additional members and interfaces to a type without involvement of the type itself.

Pre-requisite Knowledge

This document assumes knowledge of aspect-oriented programming and the C# language and it uses the same terminology as the C# specification. Additional terminology is only added to explain new constructs.

What is new in Eos 0.3?

The current version of Eos, 0.3 beta 1, makes the following changes to the language specification of 0.2:

Aspects and classes are not two separate constructs. Instead, there is only one construct classpect that is declared using the keyword class. Besides all the class members such as methods, fields, events, indexers, etc, this new construct can declare aspect-oriented constructs as well.

Unlike Eos-0.2 there is no advice construct in the current model. The traditional advices are represented as a combination of bindings and object-oriented methods.

Table of Contents

  1. Downloading Eos.
  2. Getting Started.
  3. Supported platforms
  4. Known limitations
  5. License
  6. Pointcuts in Eos
  7. Reflective Information at the Join Point