Se ho una classe Item generica che assomiglia a questo:C# generici: Semplificare tipo di firma
abstract class Item<T>
{
}
ed un contenitore di elementi che assomiglia a questo:
class Container<TItem, T>
where TItem : Item<T>
{
}
Dal TItem dipende da T , è possibile semplificare la firma del tipo di Container in modo che richieda un solo parametro di tipo? Quello che voglio davvero è qualcosa di questo:
class Container<TItem>
where TItem : Item // this doesn't actually work, because Item takes a type parameter
{
}
così posso istanziare come segue:
class StringItem : Item<string>
{
}
var good = new Container<StringItem>();
var bad = new Container<StringItem, string>();
Il compilatore dovrebbe essere in grado di dedurre che T è stringa quando TItem è StringItem, giusto? Come faccio a far succedere questo?
utilizzo desiderata:
class MyItem : Item<string>
{
}
Container<MyItem> container = GetContainer();
MyItem item = container.GetItem(0);
item.MyMethod();
penso che si può. Il suo polimorfismo. Puoi sovrascrivere i metodi astratti. –
In questo caso è possibile creare classe StringContainer come classe StringContainer dove TItem: Oggetto –
RockWorld
non credo che il compilatore può dedurre _partially_ tipi generici. –