I've always liked Delphi's naming convention, but wasn't really sure if there weren't better options in other libraries. At first sight, .NET class library habit of using plain class and types names seems more readable. But I've recently found a very strange situation where the lack of a good convention stands out, for the worse.
Here goes the example. A Form in WinForms has a DialogResult property (corresponding to Delphi's ModalResult property). This is an enumerated value of type DialogResult. Yes, the property name and its type name are identical. You disambiguate the first by prefixing it with self (a common practice in C# that I do not like) and the second by prefixing it with the full namespace name:
self.DialogResult := System.Windows.Forms.DialogResult.OK;
If you fail to spell out the second, the compiler will stop with an error. It is even worse that if inside any method of a form you call MessageBox.Show and check the result (again of type DialogResult) you end up referring to the property, not the the type, unless you specify the full namespace. Needless to say, I find this annoying. This situation is fairly frequent in the FCL library, but the fault is not on the specific property or type names. The fault is on the type naming convention (or the lack of it) in the library. So let's keep our TClasses in Delphi and be happy with them.