当myClass有List<Interface>时如何公开List<Class That Implements This Interface>? (C#)

问题描述 投票:0回答:1

我想为我的 Box 类创建一个只读接口。盒子里装有香蕉。 Bananas 有一个只读接口 IBananaRead。

问题是,在框代码中,我使用

List<Banana>
执行所有操作,但在只读接口中,我希望其他类不能访问 Banana,而是访问 IBananaReads。遇到此类情况如何解决?

class Box: IBoxRead
 {
List<Banana> bananas;
}

interface IBoxRead {
List<IBananaRead> bananas;
}

我可以在 Box 中创建 IBananaRead 接口的重复列表,但由于重复,这似乎不正确。

class Box: IBoxRead
 {
List<Banana> bananas;
List<IBananaRead> bananaReads;
}

interface IBoxRead {
List<IBananaRead> bananaReads;
}

最终目标是与 Box 进行两种类型的交互:

// A read-only class iterates over:
foreach (IBananaRead b in instanceOfBoxRead.bananas) 
{
  b.ReadTheBanana();
}

// Another class that has right to edit the bananas in the box iterates
// using the class Banana, not the readonly interface of IBananaRead:
foreach (Banana b in instanceOfBox.bananas) 
{
  b.EditTheBanana();
}
c# interface
1个回答
0
投票

除非我遗漏了什么,否则你只需要这个:

var boxList = new List<Box>();

// ...

var iBoxReadList = boxList.Cast<IBoxRTead>().ToList();

这需要按需执行,即每次您需要只读项目列表时执行,因为它不会与原始列表一起更新。您可以声明一个只读属性并在 getter 中创建新列表。

© www.soinside.com 2019 - 2024. All rights reserved.