我有一个包含项目列表的类(实现IHasItems
)。在特定场景中,我想通过显式实现隐藏这些项目IHiddenItems
以返回空列表。
但是有一个现有的方法(PrintItems
在这种情况下是 - ),输入参数类型是IHasItems
. 因此,即使我将对象转换为IHiddenItems
.
尝试这种方法的原因是我不想创建这个对象的原型并在原型实例中将其设置为空。
public interface IHasItems
{
IEnumerable<string> Items { get; }
}
public interface IHiddenItems : IHasItems
{
new IEnumerable<string> Items { get; }
}
public class Implementation : IHasItems, IHiddenItems
{
public Implementation()
{
Items = new List<string>()
{
"A","B","C"
};
}
public IEnumerable<string> Items { get; }
IEnumerable<string> IHiddenItems.Items { get; } = new List<string>(); // Empty
}
static class Program
{
static void Main()
{
Implementation derivedClass = new Implementation();
Console.WriteLine($"Implementation: {derivedClass.Items.Count()}");
Console.WriteLine($"IHasList: {((IHasItems)derivedClass).Items.Count()}");
Console.WriteLine($"IEmptyList: {((IHiddenItems)derivedClass).Items.Count()}");
PrintItems(((IHiddenItems)derivedClass));
Console.Read();
}
public static void PrintItems(IHasItems obj)
{
Console.WriteLine($"PrintItems method: {obj.Items.Count()}");
}
}
结果
Implementation: 3
IHasList: 3
IEmptyList: 0
PrintItems method: 3
预期的
没有修改PrintItems
,它应该显示到控制台PrintItems method: 0