Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Manning - Windows Forms Programming With CSharp.pdf
Скачиваний:
72
Добавлен:
24.05.2014
Размер:
14.98 Mб
Скачать

 

MODIFY THE CLASS NAMESPACE

 

 

 

 

 

Action

 

Result

 

 

 

7

Modify the entire

The PhotoAlbum.cs file should now look as follows:

 

MyPhotoAlbum namespace to

using System;

 

exist within the Manning

 

 

 

 

namespace

namespace Manning

 

How-to

{

 

 

namespace MyPhotoAlbum

 

Enter the bolded text into the

{

 

 

PhotoAlbum.cs file. When you

/// <summary>

 

type the final brace, Visual

///

Summary description for PhotoAlbum.

 

/// </summary>

 

Studio will automatically

 

public class PhotoAlbum

 

reformat the lines as shown.

{

 

 

Note: We have not made a sim-

public PhotoAlbum()

 

{

 

 

ilar change in the MyPhotos

 

//

 

application since in this project

 

// TODO: Add Constructor Logic here

 

the namespace is not likely to

 

//

 

}

 

 

be used outside of the applica-

 

 

}

 

 

tion itself.

}

 

 

 

}

 

 

 

 

 

Our library is now ready; all we need to do is add code. One last task before we do this is to make certain we can use our library from within the MyPhotos application project. For this to work, the MyPhotos project must include a reference to the MyPhotoAlbum class. This corresponds to the /reference switch on the C# compiler (csc.exe) that we saw in chapter 1, and is a bit like linking a library into your program in C++. Since there are no header files in C#, a reference is all we need to start using classes from the library in our project.

REFERENCE MYPHOTOALBUM FROM THE MYPHOTOS PROJECT

 

Action

Result

 

 

 

8

Display the Add Reference

 

 

dialog box for the MyPhotos

 

 

project.

 

 

How-to

 

 

a. Click the MyPhotos

 

 

project in the Solution

 

 

Explorer window.

 

 

b. Click on the Project menu.

 

 

c. Select the Add Reference

 

 

item.

 

 

Alternately

 

 

Right-click on the

 

 

References entry under the

 

 

MyPhotos project in the

 

 

Solution Explorer window,

 

 

and select Add Reference.

 

 

 

 

CLASS LIBRARIES

137

REFERENCE MYPHOTOALBUM FROM THE MYPHOTOS PROJECT (continued)

 

Action

Result

 

 

 

9

Reference the

The MyPhotoAlbum assembly appears in Solution Explorer

 

MyPhotoAlbum project.

under the References entry for the MyPhotos project.

 

How-to

 

 

a. Click the Projects tab.

 

 

b. Click the MyPhotoAlbum

 

 

project.

 

 

c. Click the Select button.

 

 

d. Click OK to add the

 

 

selected project.

 

 

 

 

It is important to realize that our new reference refers to the assembly produced by the MyPhotoAlbum project, and not the project itself. Visual Studio automatically uses the correct path when compiling the MyPhotos project to pick up the most recent MyPhotoAlbum library from the corresponding project.

If you are not using Visual Studio .NET to build your program, you will need to establish the correct library location manually. The command-line tools discussed in chapter 1 are used for this purpose. The next section provides a short discussion on this topic.

5.2.2USING THE COMMAND-LINE TOOLS

As we saw in chapter 1, you can build Windows Forms applications without using Visual Studio .NET. The interactive environment makes a number of tasks easier, but also uses memory and other system resources. On a computer with limited resources, this can present some problems. If you have a favorite editor and are comfortable working with makefiles, you can create the examples in this book without using Visual Studio .NET.

To create a class library such as MyPhotoAlbum.dll, create a MyPhotoAlbum directory for the library and place the required source files in it. In this case you would create a PhotoAlbum.cs file to hold the PhotoAlbum class source code, and create other files as required. You can create an AssemblyInfo.cs file as well, or simply include the version number and other assembly information at the top of your file as we did in chapter 1. The C# compiler (csc.exe) discussed in chapter 1 is used to produce both executables and libraries. The /target switch specifies the type of output file to produce.

138

CHAPTER 5 REUSABLE LIBRARIES

C# compiler output options (/target switch)

Switch

Output

Comments

 

 

 

/target:exe

Creates a console

This is the default.

 

application (.exe).

 

/target:library

Creates a library file (.dll).

The library generated is an assembly that can be referenced by other .NET applications.

/target:module

Creates a library module

This option does not produce an assembly manifest

 

(.dll).

for the file. Such a file cannot be loaded by the .NET

 

 

runtime until it is incorporated in an assembly

 

 

manifest using the /addmodule switch. This

 

 

permits collections of files to become a single

 

 

assembly.

/target:winexe

Creates a Windows

When a Windows application is run in a console

 

application (.exe).

window, the console does not wait for the

 

 

application to exit. This is different than a console

 

 

application, where the console does in fact wait.

 

 

 

The /out switch can be used to specify the output file name. Both /out and /target must appear before any source file names.

For example, the following line will create a library assembly called MyPhotoAlbum.dll using a single source file PhotoAlbum.cs.

>csc /target:library /out:MyPhotoAlbum.dll PhotoAlbum.cs /r:System.dll

To use this library with your MyPhotos application, you will need to include a /r reference when compiling the application. For example, if your library was in a directory called C:\MyProjects\MyPhotoAlbum, then you would use the following switch when compiling the MyPhotos application:

/r:C:\MyProjects\MyPhotoAlbum

5.2.3CREATING THE PHOTOALBUM CLASS

No matter how you compile your library, we are now ready to implement the PhotoAlbum class. These next two sections take us through the initial implementation of this and the Photograph class. If you find typing all this code a bit tedious (or are a really bad typist!), don’t be afraid to download the final code from the book’s web site and simply read the accompanying text. For the rest of us, let’s forge ahead.

 

 

IMPLEMENT PHOTOALBUM CLASS

 

 

 

 

 

Action

 

Result

 

 

 

1

Display the PhotoAlbum.cs

 

 

file in the main window.

 

 

 

 

 

 

2

Add some class

 

/// <summary>

 

documentation.

 

/// The PhotoAlbum class represents a

 

 

 

/// collection of Photographs.

 

 

 

/// </summary>

 

 

 

 

CLASS LIBRARIES

139

IMPLEMENT PHOTOALBUM CLASS (continued)

 

Action

Result

 

 

 

3

Define CollectionBase

public class PhotoAlbum : CollectionBase

 

as the base class.

{

 

 

 

4

Create an empty default

public PhotoAlbum()

 

constructor.

{

 

 

// Nothing to do

 

 

}

 

 

Note: It’s a good idea to add a short comment in situa-

 

 

tions like this to inform the poor guy or gal who eventu-

 

 

ally supports your code that you created an empty

 

 

constructor on purpose.

 

 

 

You may notice here that the MyPhotoAlbum project does not compile. Try to do so and the compiler returns an error something like the following:

Error The type or namespace name 'CollectionBase' could not be

found (are you missing a using directive or an assembly ref-

erence?)

This is because CollectionBase is part of the System.Collections namespace. It turns out this namespace is part of the system library, so there is no need for another reference in our project. We could fix the error by declaring the class as follows:

public PhotoAlbum : System.Collections.CollectionBase

{

. . .

Since we may use other objects or names from the System.Collections namespace, we will instead simply indicate that our class will use this namespace at the top of the file.

USE SYSTEM.COLLECTIONS NAMESPACE

 

Action

Result

 

 

 

5

Add a using directive to

You should now have two using directives present:

 

the PhotoAlbum.cs file for

using System;

 

the System.Collections

 

using System.Collections;

 

namespace.

 

 

 

 

Now the project should compile with no errors. Before we implement any members for this class, let’s also take a look at the Photograph class.

140

CHAPTER 5 REUSABLE LIBRARIES