orland’s C#Builder is an Integrated Development Environment (IDE) that provides extensive support for building .NET applications. Despite its name, C#Builder doesn’t support only C#, it also supports VB.NET in its first release, with an admittedly much larger emphasis on C#. Borland says it plans to support other .NET-compatible languages in future versions.
The product is important for several reasons:
Installation was straightforward and caused no problems. You don’t have to have Visual Studio installed, but if you do, there aren’t any undesirable side effects. You do have to have the .NET Framework, but if you don’t the installation takes care of that for you.
When you first launch C#Builder, you’ll see a Welcome Page (see Figure 1) that’s roughly the equivalent of Visual Studio’s Start Page. From the Welcome Page, you can create new projects or select recent projects, access training, examples, resources such as support and newsgroups, or, in an example of unashamed (and unnecessary) marketing, find links to other Borland products. This marketing ploy extends to the six icons visible at the top of the Welcome Page, which provide yet another series of links to most of the products visible in Figure 1 under the Microsoft .NET Solutions from Borland heading. While links to related products are convenient and welcome in products if they’re located somewhere out-of-the-way?under Help, perhaps?they simply use up screen real-estate on a day-to-day basis. For example, Borland could have used the space to eliminate a required click by putting the contents of the dialog to create new Items (see Figure 2) right on the Welcome Page. Instead, you have to click New Item and then select from the dialog.
Borland has the advantage of the Visual Studio model, and it has succeeded in producing an IDE that’s immediately usable even by die-hard Visual Studio developers and at the same time integrating some Borland-specific and third-party tools that provide nearly immediate benefits. First, C#Builder itself has an important role as the development tool in Borland’s support for the full “application development lifecycle,” from planning to delivery. In the Enterprise version, Borland includes the CaliberRM product for the planning state, which can help in gathering requirements from end users and other interested parties.
For the design stage, the UML-based Together product helps with “design-driven development.” The development tool is C#Builder itself, integrated with the Optimizeit profiler for identifying application bottlenecks, and StarTeam for version management. Borland provides open interfaces for these tools, so it may be possible to integrate familiar third-party tools (such as Rational or Visual SourceSafe) with C#Builder if you prefer. Not every tool mentioned ships with all versions of C#Builder, so make sure the version you select includes the tools you need.
No matter which edition you purchase, C#Builder includes the InterBase Developer Edition, a trial version of Optimizeit, the Enterprise version of ComponentOne Studio suite of components, and Borland-tailored version of Crystal Reports and InstallShield Express. Finally, the tool integrates with HTMLTidy, a powerful HTML cleanup, transformation, and formatting tool originally created by Dave Raggett.
Main IDE Windows
The C#Builder IDE uses dockable window panels, many of which integrate together into tabbed sets so you can easily switch back and forth between the various views. Here’s a brief description of the most important panels:
Object Inspector. C#Builder’s Object Inspector panel lets you set component properties and connect events with event handlers. You select an object, such as a form or control, either by clicking on it in design view or by selecting it from a dropdown list at the top of the Object Inspector panel. By default, the panel docks to the full height of the window, along the left side of the IDE window, which is convenient, because, for most objects, you don’t have to scroll to see the full list of available properties.
You can elect to arrange properties by category or by name by selecting from the Arrangement item on the Object Inspector’s context menu. When you select the category view, you can expand and collapse categories, letting you hide the less-used categories and increase the space available for the categories you do use most often. When you collapse a category it “sticks” across objects?that category remains collapsed regardless of which object you select.
The Object Inspector panel has two tabs: Properties and Events. Clicking the Events tab gives you a list of all the events available for the selected item, along with a ComboBox that lets you either choose an existing event handler for that event or create a new event handler stub by entering its name. Unfortunately, double-clicking on the event name doesn’t automatically create a handler stub with a default name in the code; you have to enter a name manually.
Project Manager. The Project manager panel is the equivalent of Visual Studio’s Solution Explorer?it contains a hierarchical view of a set of projects. You can add, remove, and rename projects and items from this panel. At the root of the hierarchy is a named Project Group, containing individual projects, which in turn contain the files and folders for that particular project. Each item has a specific icon, which helps to quickly differentiate the items. Double-clicking an item performs a default action; for example, double-clicking a Windows Form item displays it in Design View.
|Figure 3: The Tool Palette. This panel contains pre-defined items you can use in your applications, arranged in collapsible sections. The figure shows all sections collapsed except the Data Components section.|
Design/Code. There are two views for Windows Forms projects: Design View and Code View. As you’d expect, the Design View lets you drag and drop components from the Tool Palette onto a design surface, and then arrange them so you can create a user interface visually, rather than creating it manually in code. In the background, C#Builder writes the code to create the visual interface, and keeps it synchronized with the Design View.
The panel contains two tabs, Design and Code, so you can rapidly switch between Design View and Code View. Some actions, such as double-clicking a component, automatically switch the panel to Code View.
Code View has all the conveniences you’d expect in a modern code editor: syntax highlighting, code folding (collapsing sections of code to keep them out of the way), Code Insights (the equivalent of Microsoft’s Intellisense), interactive syntax checking. The editor supports Code Snippets and Code Templates, a convenient feature that lets you insert pre-defined blocks of commonly used code quickly, without typing.
Tool Palette. The Tool palette (see Figure 3) contains all the controls, components, common dialogs, and custom items that you can use in your applications.
Mixed-Environment Development Capabilities
Borland has aimed C#Builder squarely at enterprise developers who need to make applications interact. It approaches application integration from two directions: Web services and J2EE integration. It’s easy to build or consume Web services in C#Builder. To create one, C#Builder has a Web service project type. To consume them, you add Web references. C#Builder creates a typed class for each Web reference, based on the names and types defined in the service’s Web Service Description Language (WSDL) file.
Web services aren’t always the most efficient way to integrate applications, so C#Builder includes Janeva, a .NET-compatible implementation of its VisiBroker product, that lets .NET applications interact with Java components running on application servers.
C#Builder’s included Borland DataProvider supports fast managed-code ADO.NET providers for Microsoft’s SQL Server, Borland’s InterBase, Oracle, and IBM’s DB2 databases, as well as the somewhat slower generic ODBC support.
Although compiling code to Microsoft’s Intermediate Language (MSIL) has many benefits, one side-effect is that it’s easy to decompile the code, just as with Java byte code. The solution for both Java and .NET is code obfuscation, which dramatically increases the difficulty of creating usable code from the intermediate formats. Therefore, it’s not surprising that both Visual Studio and C#Builder now include obfuscation tools. C#Builder includes WiseOwl’s obfuscator.
Overall, after just a brief introduction, I found I was as productive in C#Builder as in Visual Studio. Both products have nice special touches, and they look slightly different, but overall, their similarities are far greater than their differences, if you’re working in C#. Although C#Builder lets you build applications with VB.NET, it’s obvious that VB is not its primary target. VB.NET developers will feel like second-class citizens using this IDE.
The documentation integrates Borland C#Builder help, the .NET Framework SDK, and help for Crystal Reports and the ComponentOne tools; however, the documentation for the IDE itself is sparse, to be kind. For example, if you type “Project Manager” into the index, you get one entry, which simply points to an unsatisfying two-paragraph description in a “Tour of the IDE” page.
There are some very convenient features. I found Code Snippets easy and intuitive, although they could be a bit smarter about where they insert code. Using the Object Inspector is straightforward and improves on Visual Studio’s Properties window in several respects. For example, C#Builder makes it easy to hook multiple controls to a single event handler. On the other hand, it lacks some of Visual Studio’s capabilities, such as the ability to switch a Boolean property setting from True to False (yes, it uses the capitalized versions even for C# projects) by double-clicking on the property name. Instead, you have to select the desired setting from a dropdown list, which takes several times as long.
All in all, C#Builder is an excellent .NET IDE choice for people planning to work primarily in C#, for those who want to use Borland’s database engine, or who need integrated development support for interacting with J2EE EJBs.