Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环泛型语法_C#_Generics - Fatal编程技术网

C# 循环泛型语法

C# 循环泛型语法,c#,generics,C#,Generics,我有下面的场景,我不知道如何正确地声明允许我使用类型强制。删除where子句可以很好地工作,但我更希望能够使用它们来强制执行类型安全。你知道我该怎么做吗 class ClassA<TB, TC> where TB : ClassB where TC : ClassC { private TB MyPropB; private TC MyPropC; } class ClassB<TC> where TC : ClassC { private TC

我有下面的场景,我不知道如何正确地声明允许我使用类型强制。删除
where
子句可以很好地工作,但我更希望能够使用它们来强制执行类型安全。你知道我该怎么做吗

class ClassA<TB, TC> where TB : ClassB where TC : ClassC
{
    private TB MyPropB;
    private TC MyPropC;
}

class ClassB<TC> where TC : ClassC
{
    private TC MyPropC;
}

class ClassC<TB> where TB : ClassB
{
    private TB MyPropB;
}
A类,其中TB:B类,其中TC:C类
{
私人结核病MyPropB;
私人TC MyPropC;
}
B类,其中TC:C类
{
私人TC MyPropC;
}
C类,其中TB:B类
{
私人结核病MyPropB;
}

在每个类中指定两个泛型类型参数似乎有效:

class ClassA<TB, TC>
    where TB : ClassB<TB, TC>
    where TC : ClassC<TB, TC>
{
    public TB MyPropB { get; set; }
    public TC MyPropC { get; set; }
}

class ClassB<TB, TC>
    where TB : ClassB<TB, TC>
    where TC : ClassC<TB, TC>
{
    public TC MyPropC { get; set; }
}

class ClassC<TB, TC>
    where TB : ClassB<TB, TC>
    where TC : ClassC<TB, TC>
{
    public TB MyPropB { get; set; }
}

你想在这里做什么?您所拥有的不会起作用,因为您没有类型
ClassB
ClassC
,而只有类型
ClassB
ClassC
(泛型类)。它不是递归的,而是circular@TonyHopkinson当然我一直在追根究底,想弄明白这一点,我分不清循环和递归为了将来的利益,我重新命名了这篇文章。用这种方式写这篇文章感觉很奇怪,但似乎效果很好。非常感谢!!!
class Ape : ClassA<Bear, Cougar>
{
}

class Bear : ClassB<Bear, Cougar>
{
}

class Cougar : ClassC<Bear, Cougar>
{
}