使用不同泛型类的方法的泛型类

时间:2010-07-05 09:40:51

标签: c# generics

很抱歉询问看起来很明显的问题。

我有一个类型为T的“适配器”泛型类,其中T是一个已定义的接口。我想在该类中创建一个方法,该方法采用不同类型的通用适配器。

public interface ICommon { }
public class TypeOne : ICommon { }
public class TypeTwo : ICommon { }

public class Adapter<T> where T : ICommon
{
    void TakeAnotherType(Adapter<S> other)
    { }
}

这给了我一个编译错误Cannot resolve symbol 'S'

我希望能够做到;

    MyOne one = new Adapter<TypeOne>();
    MyTwo two = new Adapter<TypeTwo>();
    one.TakeAnotherType(two);

如果我更改方法以取Adapter<T>,则会抱怨“两个”不是Adapter<TypeOne>类型

3 个答案:

答案 0 :(得分:8)

void TakeAnotherType<S>(Adapter<S> other) where S:ICommon
{ }

由于T的通用类型Adapter被限制为ICommon,因此以同样的方式约束S也很重要,因为它被用作通用Adapter<T>的类型,因此它还必须满足ICommon约束。

答案 1 :(得分:2)

只需更改

void TakeAnotherType(Adapter<S> other)

void TakeAnotherType<S>(Adapter<S> other) where S : ICommon

它应该有用。

答案 2 :(得分:1)

一旦指定了一个类是通用的(通过命名它Something<T>),其中的每个方法都在该类型T上是隐式通用的。要说一个方法在不同的类型上是通用的,你必须通过调用它来SomeMethod<U>在方法名称中指定该事实。然后,此方法的主体可以访问这两种类型T是通用的类型)和U方法的类) 是通用的。)

另请注意,类型参数的两个常用约定是TUV等;或TSomethingTSomethingElseTEvenMore。我不认为我曾经见过S使用过......