C++/CLI add-in for .NET Reflector

If you don't know that tool yet, stop reading and ... stop reading ... and download it from https://www.aisto.com/roeder/dotnet/. This is a must have for any serious .NET developer.

Actually one of the very first things I do after installing VS.NET 200x is to add it as the first tool under the Tools menu in the IDE.

Title: .NET Reflector
Command: D:\Bits\NET Reflector\Reflector.exe
Arguments: $(TargetPath)
Initial Directory: $(TargetDir)

I use it all the time to better understand what the C# and the C++/CLI compilers generate and to look at our "own source code", disassembled. The second one I put down there is ILDasm.

Now, imagine my joy when Dean offered me to be alpha tester for his .NET Reflector C++/CLI Add-in! Although I have not tried that yet, he tells me it supports function-try-block!

An example from System::Text::StringBuilder::Append:

public:
System::Text::StringBuilder^ Append(System::String^ value)
{
if (value != nullptr)
{
System::String^ text1 = this->m_StringValue;
System::IntPtr ptr1 = System::Threading::Thread::InternalGetCurrentThread();
if (this->m_currentThread != ptr1)
{
text1 = System::String::GetStringForStringBuilder(text1, text1->Capacity);
}
int num1 = text1->Length;
int num2 = (num1 + value->Length);
if (this->NeedsAllocation(text1, num2))
{
System::String^ text2 = this->GetNewString(text1, num2);
text2->AppendInPlace(value, num1);
this->ReplaceString(ptr1, text2);
}
else
{
text1->AppendInPlace(value, num1);
this->ReplaceString(ptr1, text1);
}
}

       return this;


 }

As soon as this will be ready, he'll discuss with Lutz to integrate his code into the .NET Reflector. Good times are coming your way. Chapeau Dean!

BTW, I don't know about you, but I can't stand this design guideline that says that a nullptr String reference should be treated the same way as a reference to an empty String instance... Open door to hidden bugs if you ask me!