A Component in Visual C#

Here is how our simple string component looks in Visual C#:

Listing 1. Component in Visual C# (CompCS.cs)

using System;

namespace CompCS {
   public class StringComponent {
      private string[] StringsSet;

      public StringComponent() {
         StringsSet = new string[] {
            "C# String 0",
            "C# String 1",
            "C# String 2",
            "C# String 3"
         };
      }

     public string GetString(int index) {
        if ((index < 0) || (index >= 
           StringsSet.Length)) {
           throw new IndexOutOfRangeException();
         }
         return StringsSet[index];
      }

      public int Count {
         get { return StringsSet.Length; }
      }
   }
}

As mentioned previously, you use the namespace statement to create a new namespace to encapsulate the classes that you will be creating:

namespace CompCS {

This namespace can be nested and split among multiple files. A single source-code file can also contain multiple namespaces that are not nested. A containing namespace is required, since all Visual C# code must be contained in a class.

public class StringComponent {

Instances of StringComponent will be created by the common language runtime and managed in the garbage collection heap. The class constructor — which executes each time a new instance of the class is created — has the same name as the class and does not have a return type.

public StringComponent() {

Since Visual C# uses only managed types, you do not have to do anything special when declaring variables, as you had to do in Managed Extensions for C++.

Here is the GetString method, which takes an integer and returns a string and is simple and equivalent for all three sample languages:

public string GetString(int index) {
   ...
   return StringsSet[index];
}

Note the throw statement in the GetString method:

throw new IndexOutOfRangeException();

This statement creates — and throws — a runtime-based exception-handling object of type IndexOutOfRangeException.

Finally, you create the read-only Length property:

public int Count {
   get { return StringsSet.Length; }
}

The compile process for a Visual C# component is only a little more complicated than that for a stand-alone program:

csc.exe /t:library /debug+ /out:..\bin\CompCS.dll CompCS.cs

As with the Managed Extensions for C++ component, you use the /out switch to put the compiled component in the ..\Bin subdirectory. Likewise, you need the /t(arget):library switch to create a DLL rather than an executable file with a .dll file name extension.

See Also

A Component in Visual Basic | Clients for the Simple Components | Summary of Development Tutorial | Appendix A: Tools for Exploring Namespaces