Tomorrow we have a WinFX API review for some of the windows shell team’s APIs.  On one of the classes I see this set of overloads:

        public DialogResult ShowDialog();

        public DialogResult ShowDialog(Window parentWindow);

        public DialogResult ShowDialog(IWin32Window parentWindow);

        public DialogResult ShowDialog(System.Windows.Forms.Form parentForm);


My worry is in the bottom two.  They are clearly for interop with HWnd and WinForms, which I think is really great to have.  In fact, we need more of these kinds of interop methods in WinFX to help developers transition over.  Nevertheless, I am worried that they are “gunking-up” the public API.  That is they are in a super discoverable place but they do not need to be super discoverable.  People using the APIs are likely to be more advanced users that don’t need it “in their face”.  Where they are now everyone will have to wide through the list of overloads in Intellesense, docs, etc.  


I plan to suggest they remove them from this class and create a static class in some interop namespace such as:


namespace System.Windows.Controls.Interop {

    public static class ContactPickerDialogHelpers {

      public static DialogResult ShowDialog(IWin32Window parentWindow, ContactPickerDialog dialog);

      public static DialogResult ShowDialog(System.Windows.Forms.Form parentForm, ContactPickerDialog dialog);




The pattern occurs over and over again in the platform, do you think my suggestion is a good fix.  Other thoughts or comments?