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ď č. 1Také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.