Почему, ну почему в C# нет возможности писать
<? extends T>? Это же супер удобно в Java. Приведу пример, который работает в Java, но который я не могу повторить на C#:abstract class Factory<TProduct> {
public int counter;
public abstract TProduct make();
}
class Product<TItem> {
private final Factory<? extends Product<TItem>> factory;
protected Product(Factory<? extends Product<TItem>> factory) {
this.factory = factory;
factory.counter++;
}
public void destroy() {
factory.counter--;
}
}
class FloatFactory extends Factory<FloatProduct> {
@Override
public FloatProduct make() {
return new FloatProduct(this);
}
}
class FloatProduct extends Product<Float> {
protected FloatProduct(FloatFactory factory) {
super(factory);
}
}
На С# не получается:
abstract class Factory<TProduct>
{
public int counter;
public abstract TProduct Make();
}
class Product<TItem>
{
private readonly Factory<Product<TItem>> factory;
protected Product(Factory<Product<TItem>> factory)
{
this.factory = factory;
factory.counter++;
}
public void Destroy()
{
factory.counter--;
}
}
class FloatFactory : Factory<FloatProduct>
{
public override FloatProduct Make()
{
return new FloatProduct(this);
// Argument type 'ConsoleApp1222.FloatFactory' is not assignable to parameter type 'ConsoleApp1222.Factory<ConsoleApp1222.Product<float>>'
}
}
class FloatProduct : Product<float>
{
public FloatProduct(FloatFactory factory) : base(factory)
{
}
}
#нерешенное