with two implementations。 If not; use text streams。 o When streaming data; it is best to customize as little as possible。 Doing so will pli cate your program; and potentially introduce errors where none should exist。 o It is important that you understand the concept of marshaling and the fact that each medium will have a different representation of the type。 A large part of your programming day will involve moving data from one stream to another。 Some Things for You to Do The following are some exercises to apply what you learned in this chapter。 1。 In the implementation of TextProcessor; the display help routine was not very helpful。 Fix the implementation。 2。 There were no testing routines for TextProcessor。 Devise some realistic tests。 By realistic tests; I mean tests that don’t just focus on the class library and consider the application tested。 Focus on plete application tests。 3。 Having implemented the display help routine; think about whether or not the imple mentation is correct。 The class Bootstrap is a general class that uses an IProcessor instance; which means that different console applications will process different data。 Thus; writing a general help output might work; but it will not help in resolving problems。 Fix the console application TextProcessor and ReaderWriter project so that the help message is both specific and general。 4。 In the Bootstrap class; when the output was redirected to a file (as indicated by the …out argument); there was no check on whether or not the file exists。 Extend the Bootstrap class to include an additional mand…line argument that verifies if it is fine to overwrite the output file if it exists。 If an output file does exist and there is no explicit overwriting; generate an error and stop processing。 5。 The code in the final solution for IProcessor。Process() has been identified as being hard to maintain because the code to check for duplicate dates is scattered throughout the method。 Rewrite the method implementation so that the code is logical and maintainable。 …………………………………………………………Page 307…………………………………………………………… C H A P T E R 1 1 ■ ■ ■ Learning About Generics Chapter 9 explained how to use lists; delegates; and lambda expressions。 In that chapter; you also saw an example of generics when using lists to manage a collection of object instances。 The main focus of this chapter is generics and how to use them in a black box context (the code doesn’t know the specifics of the generics parameter types)。 The secondary focus is an implementation of lambda expressions using a spreadsheet。 The idea is to get you well versed in generics and lambda expressions; which you will likely use in your own production code; so that that there will be no surprises in your projects。 Why Use Generics? Here’s a surprise for you: there is no imperative need for generics; so you could skip this chapter and read the next one; right? Wrong。 I could just as easily have said there is no need for Visual Basic properties; nor any other Visual Basic construct that enriches your programming abilities。 The reasons we have Visual Basic properties and generics are programming elegance and expressiveness。 To understand what I am trying to get at; consider this sentence: Ducks walk flat feet quack loud Reading the sentence; you get an idea of what is being said; but you are not pletely sure。 Visual Basic without generics is like this sentence; in that you express your ideas in code; but some things are not as clear as you would like。 Visual Basic with generics is like this sentence: Ducks walk in a funny manner due to their flat feet; and when they quack; it is very loud。 The sentence is clearer and uses more words to describe the same thing。 The reason we talk using a more sophisticated language is that we want to explain concepts and be under stood。 If you accept that; then you can accept why there is a need and context for generics。 And if not; feel free to skip this chapter and read the next one。 An example that illustrates how using generics makes your code clearer; as well as more concise; than code that does not use generics is a container。 A container is a type that is used to manage other types; lists and collections are examples of containers。 To keep 285 …………………………………………………………Page 308…………………………………………………………… 286 CH AP T E R 1 1 ■ L E A R N I N G A B OU T 。 N E T G E N E R I CS things simple; let’s look at a container that manages a single reference。 The following is the less concise version that uses the Object type。 Public Class Container Private _managed As Object Public Sub New(ByVal toManage As Object) _managed = toManage End Sub Public ReadOnly Property Managed() As Object Get Return _managed End Get End Property End Class In the code; the class Container has a constructor with a parameter and a single property; Managed; which references the variable _managed。 The idea beh