/ / Odchýlka od T k objektu s generickými obmedzeniami objekt vs trieda - c #, generiká

Odchýlka od T do objektu s generickými obmedzeniami objektu vs trieda - c #, generika

Snažil sa prísť na to, ako by som mohol odliať Converter<string, T> na Converter<string, object> keď som mal obmedzenia where T : object, Vyriešili ho zmenou obmedzenia na where T : class, ale ja si nie som úplne istý, prečo to fungovalo.

Toto nevytvára:

public void Foo<T>(Converter<string, T> x) where T : object
{
Converter<string, object> y = x;
}

Error: Cannot implicitly convert type "System.Converter<string,T>" to "System.Converter<string,object>"

Napriek tomu nasledujúce, prečo je to?

public void Foo<T>(Converter<string, T> x) where T : class
{
Converter<string, object> y = x;
}

odpovede:

1 pre odpoveď č. 1

Takéto všeobecné obmedzenie neexistuje : object, Prvý príklad má dve chyby:

Chyba 1 Obmedzenie nemôže byť špeciálnou triedou "objekt"

a potom:

Chyba 2 Nemožno implicitne konvertovať typ "System.Converter" na "System.Converter"

takže to, čo jednoducho hovorí, že kvôli žiadnej platnej prekážke, odliaty z nie obmedzenia System.Converter<string,T> nie je možné urobiť Converter<string, object>.

Druhý príklad má platný zákaz. T je referenčný typ a môže byť odliaty object je to koreň hierarchie typu.