gpt4 book ai didi

c# - 非通用接口(interface)作为通用接口(interface)的同义词

转载 作者:行者123 更新时间:2023-11-30 22:43:15 24 4
gpt4 key购买 nike

我在 C# 中有一个通用接口(interface),我几乎总是将它与其中一种类型一起使用。我想为该类型创建一个非通用接口(interface)并使用它。

比方说,我有以下代码:

public interface IMyGenericList<out T> where T : IItem
{
IEnumerable<T> GetList();
}

public class MyList<T> : IMyGenericList<T> where T : IItem
{
public IEnumerable<T> GetList()
{
return null;
}
}

效果很好。大多数时候我需要 IMyGenericList<IItem> ,所以我尝试以下操作:

public interface IMyItemsList : IMyGenericList<IItem>
{
}

但出于某种原因我无法让 MyList 实现 IMyItemsList。以下代码返回错误

public class MyList<T> : IMyItemsList, IMyGenericList<T> where T : IItem
{
public IEnumerable<T> GetList()
{
return null;
}
}

IEnumerable<IItem> is not implemented .

为什么会这样/我能用它做什么?谢谢。

好的,感谢您的回答,我发现完全按照我最初的想法去做是不可能的。我将发布另一个关于为什么这是不可能的问题:)这是:One function implementing Generic and non-generic interface

最佳答案

你的具体例子是行不通的,因为你的类(class):

public class MyList<T> : IMyItemsList, IMyGenericList<T> where T : IItem
{
public IEnumerable<T> GetList()
{
return null;
}
}

正在尝试实现 IEnumerable<IItem> GetList()和一个 IEnumerable<T> GetList() ,这是两个不同的东西。这第一个明确是 IItem 的可枚举。 (根据您的 IMyItemsList 接口(interface)的要求),第二个是 T 的可枚举 | .

在这种情况下 T类型为 IItem但没有明确 IItem .因此在编译时,IEnumerable<IItem> GetList()不是 IEnumerable<T> GetList()所以编译器会正确地抛出一个错误告诉你 IEnumerable<IItem> GetList()未实现。

你会遇到的另一个问题是当有人这样做时会发生什么:

var list = new MyList<IItem>();

编译器将尝试创建 MyList<IItem> 的具体实现这将有两个定义 IEnumerable<IItem> GetList() .

我会重新考虑您的设计以评估单个 IEnumerable<T> GetList() .

此外,我只是挑剔:“可枚举”!=“列表”:P

关于c# - 非通用接口(interface)作为通用接口(interface)的同义词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031446/

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