What is a Non-CLS Compliant Exeception and why should I care.

While studying for Exam 70-316 (Developing and Implementing Windows-based Applications with Visual C#.NET and Visual Studio.NET) I found that the .NET framework has what is known as a “Non-CLS compliant exception”

While investigating this I found the following article on how to implement a bulletprof main routine:

    Sample of how to implement the main routine of an application.

Pop Quiz for Delphi developers : what is the most basic class that can be thrown as an exception?
The obvious answer of Exception is wrong – you can raise a TObject or descendant (TForm?)- just don’t expect your exception handers to work.

The .NET CLR has this great base Exception class.
So why do they need to allow anything else!
Why not define a ENonCLSException descendant and raise that!

It appears that IL allows a System.Object to be thrown in exactly the same way as Delphi!
The above link includes a sample of how do do this.

The moral of this tale is that your default exception handler needs to finish with a generic catch clause. I need to look into how to add my own template application to the defaults in VS.NET – some of these need to be created by default.

Inheritance of constructors in C#

This is a serious problem with the C# langauage.

Given the following two classes:

class First
{
    First(string message)
    {
       System.Console.WriteLn(message);
    }
}

class Second
{

}

The following will not compile:

Second = new Second(“Test”);

Now I know if I add the following to Second

    Second(string message)  : base(message)
    {
    }

This is not much code for a simple constructor, but what about classes with multiple constructors like exceptions? That makes them more difficult to define than necessary.