TGViewer
SpellSinger - разработчик игр на Unity SpellSinger - разработчик игр на Unity @spellsingergames · 548 subscribers
Post #50 556
SpellSinger - разработчик игр на Unity Моя боль от дженериков в C# – отсутствие wildcards Почему, ну почему в C# нет возможности писать <? extends T>? Это же супер удобно в Java. Приведу пример, который работает в Java, но который я не могу повторить на C#: abstract class Factory<TProduct> { …
Зрители на стриме помогли найти целых 2 решения проблемы:
1) Многословное
abstract class Factory<TProduct, TItem, TFactory>
where TProduct : Product<TProduct, TItem, TFactory>
where TItem : Object
where TFactory : Factory<TProduct, TItem, TFactory>
{
public int counter;
public abstract TProduct Make();
}
class Product<TProduct, TItem, TFactory>
where TProduct : Product<TProduct, TItem, TFactory>
where TItem : Object
where TFactory : Factory<TProduct, TItem, TFactory>
{
private readonly TFactory factory;
protected Product(TFactory factory)
{
this.factory = factory;
factory.counter++;
}
public void Destroy()
{
factory.counter--;
}
}
class FloatFactory : Factory<FloatProduct, Object, FloatFactory>
{
public override FloatProduct Make()
{
return new FloatProduct(this);
}
}
class FloatProduct : Product<FloatProduct, Object, FloatFactory>
{
public FloatProduct(FloatFactory factory) : base(factory)
{
}
}


2) с ковариантом
interface IFactory<out TProduct>
{
int Counter { get; set; }
TProduct Make();
}

class Product<TItem>
{
private readonly IFactory<Product<TItem>> factory;

protected Product(IFactory<Product<TItem>> factory)
{
this.factory = factory;
factory.Counter++;
}

public void Destroy()
{
factory.Counter--;
}
}

class FloatFactory : IFactory<FloatProduct>
{
public int Counter { get; set; }

public FloatProduct Make()
{
return new FloatProduct(this);
}
}

class FloatProduct : Product<float>
{
public FloatProduct(FloatFactory factory) : base(factory)
{
}
}
  • 🔥 7
More from @spellsingergames
  1. Oct 1, 2026Автор
  2. Aug 31, 2026Post #235
  3. Aug 25, 2026Прошли модерацию на Crazy Games. Basic Launch продлится до 15 сентября или пока не наберет…
  4. Aug 24, 2026А мы, тем временем, идём покорять #crazy_games Вчера ночью отправили билд на модерацию. Мо…
  5. Aug 24, 20262 недели нужно рекоммендеру Яндекс игр, чтобы как-то отреагировать на изменения метрик. AR…
  6. Aug 14, 2026Шестой эпизод подкаста ГЕЙМДЕВ ПОД ПИВОМ уже во вторник, в 22:30МСК! Хорошенечко отоспитес…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →