您可以在 C# 中指定使用站点差异吗?

Can you specify use site variance in C#?

C# 是否有等同于 Java 的通配符?我知道 C# 有声明站点差异。但是,我想知道该语言是否提供了指定使用地点差异的选项。这是我正在寻找的示例:

class Parent {}
class Child : Parent {}
class Grandchild : Child {}

interface IProducer<out T>
{
    T produces();
}

interface IConsumer<in T>
{
    void consumes(T p);
}

class Collection<T> : IProducer<T>, IConsumer<T>
where T:new()
{
    private readonly T _v;

    public Collection()
    {
        _v = new T();
    }

    public T produces()
    {
        return _v;
    }

    public void consumes(T p)
    {
        //
    }

    public static void Main(string[] args)
    {
        Collection<Child> coll = new Collection<Child>(); // Invariance
        
        IProducer<Parent> producer = coll; // Producer using declaration site variance and segregating by interface
        IConsumer<Grandchild> consumer = coll; // Consumer using declaration site variance and segregating by interface
        
        // Equivalent of Collection<? extends Parent> producer = coll; ?
        // Equivalent of Collection<? super Grandchild> producer = coll; ?
    }
}

不,C# 只支持声明站点变量。