Click here to close now.

Welcome!

AJAX & REA Authors: Carmen Gonzalez, Elizabeth White, Blue Box Blog, Kevin Jackson, Hovhannes Avoyan

Related Topics: .NET

.NET: Article

Dealing With The C# 2.0 Genericity

Leverage generics for flexible code, the forthcoming .NET 2.0 Framework will introduce new important features

The forthcoming .NET 2.0 Framework will introduce new important features. One of those features is genericity. Genericity is not really a new concept. It has been included in some previous languages as ADA, C++, Eiffel, and in the mathematical model of abstract data types (ADT). However, the C# 2.0 notation for genericity (see the first entry in the References section), the integration of genericity in the .NET type system, the efficient implementation of genericity in the CLR-JIT process, and the new generic features included in the reflection mechanism will strengthen .NET programmers' output.

Genericity in .NET rests on the same basic reasons for which .NET promotes strongly typed languages:

  • Readability: Explicit declarations tell readers about the intended meaning of the code
  • Reliability: Thanks to explicit type declarations, a compiler can easily detect inconsistencies and erroneous operations
  • Efficiency: By knowing the types early, a compiler will be able to generate a more efficient code
The first section of this article starts by presenting arrays, the humble and anonymous generic construction embedded in C# and many programming languages. The second section explains how a limited form of generic types can be currently implemented in C#, based on the object type. In the third section the main characteristics and benefits of genericity in C# 2.0 are illustrated, including the notion of constrained genericity. An additional section explains how we can interact between generics and non-generics. Finally, we present an interesting example about simulation of multiple inheritance with genericity.

Arrays: The Implicit Generic Construction Embedded in .NET
Perhaps because arrays are predefined in C# and embedded in the CLR, when using them programmers don't realize that they are dealing with a truly an efficient generic construction.

When you write a declaration like int[] a you are instantiating a generic container, known as an array of items of type int. Any type T can be used to define an array through the notation T[]. A set of common properties and functionalities implicitly applies to arrays no matter what type T is:

  • All array objects are created with the notation new T[k] where k must be a positive expression that defines the numbers of items in the array.
  • An int property Length applies to every array (no matter the type T) to return the number of items of the array. Items are numbered from 0 to Length-1.
  • All items of an array of type T[] have the same type T. Items of a value type T are initialized as such value type (zero for numeric types, false for bool type, and so on) and items of a reference type T are initialized to null.
    1.  For an array T[] a, a[i] acts as a variable of type T denoting the item at position i. When using in the right side, a[i] returns an item of type T, and when using in a left side, a[i]=x; x must be of type T.
Unfortunately, before C# 2.0, programmers could not define a custom parameterized type based on a type T.

Genericity Based on the "Wild card type" Object
Today C# programmers who want to define a stack type of int objects must write the code in Listing 1a. If they wish to define a stack of objects of a type Person they could write the code in Listing 1b (for simplicity, this is only a rough implementation of a stack). Note that both classes Stackofint and StackofPerson have similar codes. They differ only in the type they are based on (int or Person). We can avoid that replication by defining a sole Stack type based on the root type object (see Listing 2).

Here object acts like a wild card type. Since every type in .NET inherits from the base object type, and thanks to the boxing and unboxing features of .NET, programmers can seamless push either a reference object or a value object into a stack. Note that the parameter of Push is of type object, then some calls like s.Push(3) or s.Push(new Person(...)) are correct, because any type conforms to object.

The approach above has the benefit of no code replication, but it has the following flaws:

  • It is not possible to enforce the kind of data to be placed in the stack. As the following code snippet shows, we could create a stack and push an assortment of objects on it.

    Stack s = new Stack(10);
    s.Push(new Date(10,10,2000);
    s.Push(new Person(...));
    s.Push(100);

  • Boxing and unboxing operations that apply when pushing and retrieving objects of value types can be particularly onerous.
  • Because the compiler only knows that objects in the stack have the general type object, when we retrieve the objects from the stack we must cast them to the real type they have:

    int k = (int) s.Pop();
    Person p = (Person) s.Pop();

However casting has a run-time cost, and even worse, it is an error-prone approach because it is possible to write a wrong cast.

It would be significant if we could have the safety and efficiency of specific type definitions (as shown in Listing 1), and, at the same time, we could avoid code replication. Both benefits could be achieved with the forthcoming genericity of C# 2.0.

Genericity in C# 2.0
In C# 2.0 the aforementioned definition of Stack could be best obtained by using the generic notation shown in Listing 3.

Here Stack<T> denotes a generic type and T denotes a type parameter of this generic type. Instantiating this type parameter with an actual type will result in a type of specific stack:

Stack<Person> persons = new Stack<Person>(10);.

Now persons has the type Stack<Per-son>. This has the following benefits:

  • All operations defined in Stack<T> are applied to Stack<Person> without programming duplication
  • Compiler can accept the following code without doing casting:

    Person harry = new Person(...);
    persons.Push(harry);
    Person p = persons.Pop();

  • In an attempt to push on persons, an object of a type not conforming to Person will result in a compilation error:

    persons.Push(23); //Error because 23 is not of type Person

    It is possible to push on the stack persons an object of a subtype of Person. If the class Employee inherits from Person, then the following code is correct:

    persons.Push(new Employee(...));

A type parameter can be used as an instantiation parameter of another generic type. Note that in the Stack<T> definition, the parameter T is used to instantiate the internal array T[] items. It means that when we write Stack<Person>, its instance variable items will be of type Person[].

Furthermore, generic instantiation can be done recursively. For example, a three-dimensional list can be defined as follows:

List<List<List<string>>> stringCube =
new List<List<List<string>>>(5);

Multiple Type Parameters
A generic type can have any number of type parameters. For example, in the generic dictionary type

class Dictionary<TKey, TValue> {...}

TKey must be instantiated with the type that we want to use as the type of the key (the object to search in the dictionary), and TValue must be instantiated as the type of the object associated with the key. Some examples are:

Dictionary<string, string> englishSpanish = new Dictionary<string, string>();
Dictionary<string, long> phoneList = new Dictionary<string, long>();
Dictionary<string, Person> contactList = new Dictionary<string, Person>();

More Stories By Miguel Katrib

Miguel Katrib is a PhD and a professor in the Computer Science Department at the University of Havana. He is also the head of the WEBOO group dedicated to Web and object-oriented technologies. Miguel is also a scientific advisor in .NET for the software enterprise CARE Technologies, Denia, Spain.

More Stories By Mario del Valle

Mario del Valle is working toward his MS at the Computer Science Department at the University of Havana, and is a software developer at the WEBOO group dedicated to Web and object-oriented technologies.

Comments (1) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
.NET News Desk 12/06/05 06:45:57 PM EST

The forthcoming .NET 2.0 Framework will introduce new important features. One of those features is genericity. Genericity is not really a new concept. It has been included in some previous languages as ADA, C++, Eiffel, and in the mathematical model of abstract data types (ADT). However, the C# 2.0 notation for genericity (see the first entry in the References section), the integration of genericity in the .NET type system, the efficient implementation of genericity in the CLR-JIT process, and the new generic features included in the reflection mechanism will strengthen .NET programmers' output.

@CloudExpo Stories
Chuck Piluso will present a study of cloud adoption trends and the power and flexibility of IBM Power and Pureflex cloud solutions. Speaker Bio: Prior to Data Storage Corporation (DSC), Mr. Piluso founded North American Telecommunication Corporation, a facilities-based Competitive Local Exchange Carrier licensed by the Public Service Commission in 10 states, serving as the company's chairman and president from 1997 to 2000. Between 1990 and 1997, Mr. Piluso served as chairman & founder of ...
SYS-CON Events announced today Sematext Group, Inc., a Brooklyn-based Performance Monitoring and Log Management solution provider, will exhibit at SYS-CON's DevOps Summit 2015 New York, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Sematext is a globally distributed organization that builds innovative Cloud and On Premises solutions for performance monitoring, alerting and anomaly detection (SPM), log management and analytics (Logsene), search analytics (S...
SYS-CON Events announced today Isomorphic Software, the global leader in high-end, web-based business applications, will exhibit at SYS-CON's DevOps Summit 2015 New York, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Isomorphic Software is the global leader in high-end, web-based business applications. We develop, market, and support the SmartClient & Smart GWT HTML5/Ajax platform, combining the productivity and performance of traditional desktop software ...
Many of the well-known examples of DevOps success we read in blogs on the Internet paint an idyllic picture of DevOps productivity. A team was facing a stodgy, slow-moving operations department, teams weren’t delivering software on time. Those teams moved to DevOps, became proactive about infrastructure and deployment automation, and an overnight transition to productivity ensues. People are promoted, projects are successful, and developers and system administrators dance hand-in-hand in a final...
SOA Software has changed its name to Akana. With roots in Web Services and SOA Governance, Akana has established itself as a leader in API Management and is expanding into cloud integration as an alternative to the traditional heavyweight enterprise service bus (ESB). The company recently announced that it achieved more than 90% year-over-year growth. As Akana, the company now addresses the evolution and diversification of SOA, unifying security, management, and DevOps across SOA, APIs, microser...
SYS-CON Events announced today that Creative Business Solutions will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Creative Business Solutions is the top stocking authorized HP Renew Distributor in the U.S. Based out of Long Island, NY, Creative Business Solutions offers a one-stop shop for a diverse range of products including Proliant, Blade and Industry Standard Servers, Networking, Server Options and...
Can call centers hang up the phones for good? Intuitive Solutions did. WebRTC enabled this contact center provider to eliminate antiquated telephony and desktop phone infrastructure with a pure web-based solution, allowing them to expand beyond brick-and-mortar confines to a home-based agent model. It also ensured scalability and better service for customers, including MUY! Companies, one of the country's largest franchise restaurant companies with 232 Pizza Hut locations. This is one example of...
SYS-CON Events announced today Arista Networks will exhibit at SYS-CON's DevOps Summit 2015 New York, which will take place June 9-11, 2015, at the Javits Center in New York City, NY. Arista Networks was founded to deliver software-driven cloud networking solutions for large data center and computing environments. Arista’s award-winning 10/40/100GbE switches redefine scalability, robustness, and price-performance, with over 3,000 customers and more than three million cloud networking ports depl...
SYS-CON Events announced today that kintone has been named “Bronze Sponsor” of SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY, and the 17th International Cloud Expo®, which will take place on November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA. kintone promotes cloud-based workgroup productivity, transparency and profitability with a seamless collaboration space, build your own business applic...
BlueBox bridge the chasm between development and infrastructure. Hosting providers are taking standardization and automation too far. For many app developers it does nothing but spawn mayhem and more work. They have to figure out how their creations live on a pre-fab infrastructure solution full of constraints. Operations-as-a-Service is what BlueBox does. BlueBox utilizes development tools such as OpenStack, EMC Razor, Opscode’s Chef and BlueBox's proprietary tools give the power to do the unor...
@ThingsExpo has been named the Top 5 Most Influential M2M Brand by Onalytica in the ‘Machine to Machine: Top 100 Influencers and Brands.' Onalytica analyzed the online debate on M2M by looking at over 85,000 tweets to provide the most influential individuals and brands that drive the discussion. According to Onalytica the "analysis showed a very engaged community with a lot of interactive tweets. The M2M discussion seems to be more fragmented and driven by some of the major brands present in the...
SYS-CON Events announced today that Cisco, the worldwide leader in IT that transforms how people connect, communicate and collaborate, has been named “Gold Sponsor” of SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Cisco makes amazing things happen by connecting the unconnected. Cisco has shaped the future of the Internet by becoming the worldwide leader in transforming how people connect, communicate and collaborat...
SYS-CON Events announced today that Liaison Technologies, a leading provider of data management and integration cloud services and solutions, has been named "Silver Sponsor" of SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York, NY. Liaison Technologies is a recognized market leader in providing cloud-enabled data integration and data management solutions to break down complex information barriers, enabling enterprises to make sm...
SYS-CON Events announced today that Windstream, a leading provider of advanced network and cloud communications, has been named “Silver Sponsor” of SYS-CON's 16th International Cloud Expo®, which will take place on June 9–11, 2015, at the Javits Center in New York, NY. Windstream (Nasdaq: WIN), a FORTUNE 500 and S&P 500 company, is a leading provider of advanced network communications, including cloud computing and managed services, to businesses nationwide. The company also offers broadband, p...
In this session we look at creating interactive communications via the web by adding messaging, file transfer, and group communication (group chat and audio/video conferencing) into the web experience. We will also discuss potential applications of this technology in areas including B2B, B2C, P2P, and gaming. Peter is Technical Director at Acision. He graduated from The University of Edinburgh in 2000 with a BSc (Hons) in Computer Science. After graduation Peter worked on a PSTN switch dev...
SYS-CON Events announced today that SoftLayer, an IBM company, has been named “Gold Sponsor” of SYS-CON's 16th International Cloud Expo®, which will take place June 9-11, 2015 at the Javits Center in New York City, NY, and the 17th International Cloud Expo®, which will take place November 3–5, 2015 at the Santa Clara Convention Center in Santa Clara, CA. SoftLayer operates a global cloud infrastructure platform built for Internet scale. With a global footprint of data centers and network points...
WebRTC Summit has announced today that Peter Dunkley has been named summit chair of WebRTC Summit 2015 New York. The 4th International WebRTC Summit will take place on June 9-11, 2015, at the Javits Center in Manhattan, New York. @ThingsExpo anticipates 90% of WebRTC companies & developers will monetize their products & services through IoT by 2016. Peter Dunkley is Technical Director at Acision. He graduated from The University of Edinburgh in 2000 with a BSc (Hons) in Computer Science...
The WebRTC Summit 2015 New York, to be held June 9-11, 2015, at the Javits Center in New York, NY, announces that its Call for Papers is open. Topics include all aspects of improving IT delivery by eliminating waste through automated business models leveraging cloud technologies. WebRTC Summit is co-located with 16th International Cloud Expo, @ThingsExpo, Big Data Expo, and DevOps Summit.
SYS-CON Events announced today that Stratoscale, the new data center operating system, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Based in Herzeliya, Israel, Stratoscale is redefining the data center, developing a hardware-agnostic, software platform hyper-converging compute, storage and networking across the rack or data center. The self-optimizing platform automatically distributes all physical...
SYS-CON Events announced today that ProfitBricks, the provider of painless cloud infrastructure, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY., and the 17th International Cloud Expo®, which will take place on November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA. ProfitBricks is the IaaS provider that offers a painless cloud experience for all IT users, with no learning curve. ...