Specjalizacja szablonu - rzutowanie na typ ogólny

0
public class AContainer<T> where T : class
    {
        T Selected { get; set; }
        T Items { get; set; }
    }

    public class AContainer : AContainer<object> { }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            AContainer<string> s = new AContainer<string>();
            AContainer s2 = s;
        }
    }

Czemu nie można przerzutować na typ ogólny? Przecież string jest typu object. Potrzebuję w jednym miejscu używać specjalizowanego szablonu i przekazać go np do biblioteki DLL, bardziej ogólny typ jako object.

0

Nie musisz rzutować żeby przekazać obiekt do DLL-ki.
Możesz też cały kontener rzutować na object.

0

No to tak ogólnie hasło rzuciłem z tą DLL.
Nie mogę pojąć czemu nie działa ten zapis co przedstawiłem.

0

Bo AContainer<string> to nie AContainer<object> i nie może być rzutowany ani w jedną ani w drugą stronę, nawet jeśli string może być rzutowany na object.
Pewnym wyjątkiem od tego w C# jest kowariancja i kontrawariancja, ale ma zastosowanie w interfejsach, a nie klasach.
Ale może się przydać w twoim przypadku. Pogóglaj.

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