gpt4 book ai didi

c# - 基于同一定义中其他类型参数的泛型类型参数约束

转载 作者:行者123 更新时间:2023-11-30 21:20:40 24 4
gpt4 key购买 nike

我有这样定义的类型层次结构:

interface IMyClass
{
}

interface IBase1<T>
{
}

interface IBase2<T>
{
}

interface IMyDerived1 : IBase1<IMyClass>
{
}

class Base1<T, U> : IBase1<T>
where U : IBase2<T>
{
}

class Base2<T, U> : IBase2<T>
where U : IBase1<T>
{
}

class Derived1<T, U> : Base1<T, U>, IMyDerived1
where T : IMyClass
where U : IBase2<T>
{
}

class Derived2<T, U> : Base2<T, U*>
where T : IMyClass
where U : IMyDerived1
{
}

但 Visual Studio 2008 (.net 3.5 SP1) 表示 Derived2 的父说明符中的参数 U(标有 *)不可转换为 IBase1<T> .这可以解决吗?

编辑:

它确实看起来像泛型过度使用,但允许 Base1,2 和 Derived1,2 在不强制转换的情况下对提供的类型应用操作。像这样:

class MyClass : IMyClass
{}

class MySpecific1 : Derived1<MyClass, MySpecific2>
{
// use inherited properties and methods of type MyClass here
// use properties of MySpecific2 returning MyClass without casts
}

class MySpecific2 : Derived2<MyClass, MySpecific1>
{
// use inherited properties and methods of type MyClass here
// use properties of MySpecific1 returning MyClass without casts
}

也许这可以通过 .net4 中的变体更优雅地解决,但我现在坚持使用 3.5。

最佳答案

class Derived2<T, U>: Base2<T, U>
where T: IMyClass
where U: IMyDerived1, IBase1<T>
{
}

关于c# - 基于同一定义中其他类型参数的泛型类型参数约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3149804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com