通用约束C#

时间:2015-05-25 13:07:14

标签: c# generics

我需要使用classesinherit制作部分Interface generic field 像那样

public Interface ICommon<Ttype>
{
  Ttype Filed{get;set;}
}

public Class class1:Icommon<int>
{
  int Filed{get;set;}
}

public Class class2:Icommon<double>
{
  double Filed{get;set;}
}

我创建了一个使用类generic class with constraintsclass1的{​​{1}}进行类似的操作:

class2

每次我使用public Class GenericClass<Ttype,Tcommon> where Ttype:ICommon<Tcommon> { //forexample public Ttype someOperation(Ttype x) { var a=x.Field; //............. } } 时,我都必须知道我使用的GenericClasstype of Fieldclass1才能传递它以匹配{ {1}}

有没有办法像这样写class2

generic constraint

GenericClass而没有public Class GenericClass<Ttype,Tcommon> where Ttype:**ICommon** { //forexample public Ttype someOperation(Ttype x) { var a=x.Field; //............. } } ??

更新 或如何修改ICommon <TCommon>就像那样

ICommon

2 个答案:

答案 0 :(得分:1)

简短回答是:不。

您需要告诉编译器类型的泛型参数。 实际上,GenericClass<int>GenericClass<string>是CLR中的两个不同类。

答案 1 :(得分:1)

我希望我明白你打算做什么:

public interface ICommon<T>
{
    T Field { get; set; }
}

public class GenericClass<T>
{
    public ICommon<T> SomeOperation(ICommon<T> x)
    {
        // do your stuff
    }
}