Domanda

I have following classes under different namespaces. I mean, the same 3 classes exist under different namespaces.

public class A
{
   public int a { get; set; }
}

public class B
{
   public A objA { get; set; }
}

public class C
{
   public List<B> listBinC { get; set; }
}

In order to utilize/operate between the objects of these classes I thought of writing an interface wrapper such as

public interface iA
{
   int a { get; set; }
}

public interface iB<T> where T: iA
{
   T objA { get; set; }
}

public interface iC<T> where T : iB<iA>
{
   List<T> listBinC {get; set; }
}

After this I have changed my Class definitions to

public class A : iA
{
    public int a { get; set; }
}

public class B : iB<A>
{
    public A objA { get; set; }
}

class C : iC<B>
{
    public List<B> listBinC { get; set; }
}

When Compiled I am getting the following Error

The type 'Example.B' cannot be used as type parameter 'T' in the generic type or method 'Example.iC<T>'. 
There is no implicit reference conversion from 'Example.B' to 'Example.iB<Example.iA>'.

I cannot change my class structure as it is provided by different team. What is the right way to enforce the interface 'constraints' to resolve the error?

È stato utile?

Soluzione

public interface iC<T, TI> 
    where T : iB<TI> 
    where TI : iA
{
   List<T> listBinC {get; set; }
}

Here iA is pulled out as a separate generic parameter, so you can apply a constraint on it (for TI to be derived from iA) and then declare B like this:

class C : iC<B, A>
{
    public List<B> listBinC { get; set; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top