Klasa generyczna. new() z agrumentami

0

Hej! Mam taką klasę:

   public static class FormKonstruktor<T> where T: Window, new(Window oknoRodzic)
    {
        public static void StworzMenu(ref T menuWindow, Window oknoRodzic)
        {

            if (menuWindow == null || !menuWindow.IsLoaded)
            {
                menuWindow = new T(oknoRodzic);
                menuWindow.Show();
            }
            else
            {
                menuWindow.Activate();
            }
        }
    }

Ten kod nie działa bo nie mogę napisać czegoś takiego :

new(Window oknoRodzic)

dozwolone jest tylko

 new()

bez argumentów.

Czy zatem istnieje jakaś możliwość "powiedzenia", że T posiada konstruktor przyjmujący jako agrument obiekt Window ?
Dzięki temu mogłaby się wykonać linia:

 menuWindow = new T(oknoRodzic);

pozdrawiam

0

Niestety nie. Możesz za to zrobić to przez interfejs:

public static class FormKonstruktor<T> where T: Window, IWindowChild, new()
    {
        public static void StworzMenu(ref T menuWindow, Window oknoRodzic)
        {

            if (menuWindow == null || !menuWindow.IsLoaded)
            {
                menuWindow = new T();
                menuWindow.SetParentWindow(oknoRodzic);
                menuWindow.Show();
            }
            else
            {
                menuWindow.Activate();
            }
        }
    }
public interface IWindowChild
{
    void SetWindowParent(Window wnd);
}
0

Tylko wtedy pozostaje pytanie: po co ci w ogóle typy generyczne?

0

Fakt. W tym przypadku niepotrzebne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1