Cannot cast between generic types

后端 未结 4 1441
清歌不尽
清歌不尽 2021-01-14 21:54

I\'m trying to do this:

interface IA
{
}

class A : IA
{
}

class Foo where T: IA
{
}

class Program
{
    static void Main( string[] args )
    {
          


        
相关标签:
4条回答
  • 2021-01-14 22:41

    Sorry this is in java but you could do something like this:

    interface Alpha
    {
    }
    
    class Beta implements Alpha
    {
    }  
    
    class Foo<T>
    {
    }
    
    class Program
    {
        static void main(string[] args)
        {
            Foo<Beta> fooBeta = new Foo<Beta>();
            Foo<? implements Alpha> fooAlpha = fooBeta;
        }
    }
    

    This doesn't solve the issue completely but you get you can at least get access to all of the Alpha methods without knowing about Beta...

    0 讨论(0)
  • 2021-01-14 22:42

    All generic classes are invariant. Interfaces (and delegates) on the other hand can support co- and contra-variance, but only in the cases where it's possible safely. And they need to opt-in explicitly.

    For example via IFoo<out T> or IFoo<in T>

    0 讨论(0)
  • 2021-01-14 22:52

    those classes perform operations on those base types and NEVER need to downcast them

    Then why do you need a Foo<A> to begin with? Declare it as Foo<IA> and add A's to it.

    0 讨论(0)
  • 2021-01-14 22:56
    interface IA
        {
        }
    
        class A : IA
        {
        }
    
        interface IFoo<T> where T : IA
        {
        }
    
        class Foo<T> : IFoo<T> where T : IA
        {
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                IFoo<A> fooA = new Foo<A>();
                Foo<IA> fooIa = fooA as Foo<IA>;
            }
        }
    
    0 讨论(0)
提交回复
热议问题