这是一个语法问题。我有一个泛型类,它继承自泛型基类,并对其中一个类型参数应用约束。我还希望派生类实现一个接口。对我来说,我似乎找不出正确的语法。
这就是我所拥有的:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
我想到的第一件事是:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
但这是不正确的,因为这会导致T2需要同时实现IBar和IFoo,而不是DerivedFoo来实现IFoo。
我尝试过谷歌搜索,使用冒号,分号等,但我发现还不够。我相信答案是非常简单的。
发布于 2010-01-06 00:30:46
在定义泛型约束之前,需要包含类的整个签名。
class DerivedFoo<T1, T2> : ParentFoo<T1, T2>, IFoo where T2 : IBar
{
...
}
发布于 2010-01-06 00:32:57
public interface IFoo {}
public interface IBar {}
public class ParentFoo<T,T1> { }
public class DerivedFoo<T, T1> : ParentFoo<T, T1>, IFoo where T1 : IBar { }
发布于 2018-08-31 23:05:31
public class KeyAndValue<T>
{
public string Key { get; set; }
public virtual T Value { get; set; }
}
public class KeyAndValue : KeyAndValue<string>
{
public override string Value { get; set; }
}
这是现有答案的扩展。如果不提供类型,则默认为string
。我没有实现一个接口,但这应该不需要任何与通常不同的东西。
https://stackoverflow.com/questions/2007429
复制相似问题