1. Working with Data Types
C# was originally designed to support object-oriented design techniques, in which data and functionality are brought together. As it has matured, it has added new idioms to support programming practices that have become more common. One of those trends is to separate data storage concerns from the methods that manipulate that data. This trend is driven by the move toward distributed systems, where an application is decomposed into many smaller services, each of which implements either a single feature or a small set of related features. Adopting a new strategy for separating concerns naturally gives rise to new programming techniques. Similarly, using new programming techniques gives rise to new language features.