Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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_Inheritance_Abstract Class - Fatal编程技术网

C# 如何定义从类继承的特定类型的列表?

C# 如何定义从类继承的特定类型的列表?,c#,generics,inheritance,abstract-class,C#,Generics,Inheritance,Abstract Class,我想创建一个抽象类,任何派生类型都应该实现一个名为Entries的属性,它是该类型所有实例的列表。我的目标是,在抽象类中,我希望能够管理实例列表并对它们执行一些操作,这些操作对于所有继承类型都完全相同,但我还希望结果列表被定义为包含特定子类型的实例,以便在不强制转换的情况下更容易访问 例如,给定名为Person的抽象类和从中继承的名为Employee的类: Person应该能够访问和修改条目,就像它是一个列表一样 员工应该能够访问、修改和公开相同的条目,就好像它是一个列表,从而使外部世界能够访

我想创建一个抽象类,任何派生类型都应该实现一个名为
Entries
的属性,它是该类型所有实例的列表。我的目标是,在抽象类中,我希望能够管理实例列表并对它们执行一些操作,这些操作对于所有继承类型都完全相同,但我还希望结果列表被定义为包含特定子类型的实例,以便在不强制转换的情况下更容易访问

例如,给定名为
Person
的抽象类和从中继承的名为
Employee
的类:

  • Person
    应该能够访问和修改
    条目
    ,就像它是一个
    列表一样
  • 员工
    应该能够访问、修改和公开相同的
    条目
    ,就好像它是一个
    列表
    ,从而使外部世界能够访问其自身专门定义的所有成员
  • 对于
    Person
    的任何其他子类,前面的一点也应该是正确的,然后这些子类将
    条目
    视为它们自己的列表

是否可以在C#中实现这一点,而无需每次访问列表时将
Person
转换为
Employee
,无需在每个子类型上定义一个单独的列表,该子类型需要与抽象类可访问的列表保持同步?

类似于
抽象类Employee,其中T:Employee
?然后您可以拥有
列表条目
,因此类型将始终是您在派生列表中定义的类型class@devNull反过来说
Person
是抽象类,而不是
Employee
@devNull我试过了,但它似乎不起作用,因为当您将抽象类转换为泛型时,您还必须将类型传递到约束中。(作为旁注,对于泛型可以做什么,我不是很有经验,所以我希望我在所有事情上都使用了正确的术语。)@Andii是的,这是我的错,我没有将类型传递给约束。而且应该是
。因此
抽象类Person,其中T:Person
是正确的语法。然后您的派生类将是
classemployee:Person
,这种方法会导致内在疯狂,看起来像是扩展了某个东西的类型实际上扩展了另一个公共根。我认为不可能将包含类型用作泛型参数,因此这是不可能的。您可能需要考虑使用IQueDeLabor接口,抽象地实现,然后每个继承类都将实现它自己类型的InEnable(如iQueDead是协变的)。