IEnumerable.GetEnumerator() 和 IEnumerable.GetEnumerator()

2024-05-08

在.net框架中,有一个通用的IEnumerable<T>继承自非泛型的接口IEnumerable,并且他们都有一个GetEnumerator()方法。这两者之间的唯一区别GetEnumerator()是返回类型。 现在我有类似的设计,但是当我编译代码时,编译器说:

MyInterface<T>.GetItem()'隐藏继承的成员'MyInterface.GetItem()'。如果打算隐藏,请使用 new 关键字。

The MyInterface<T>.GetItem()返回具体类型 T,而MyInterface.GetItem()返回类型 System.Object。

所以我认为如果 BCL 团队的人编译 .net 框架,他们也会得到同样的警告。

我认为编译器警告不好,你觉得呢?我该如何解决这个问题?我的意思是我想在调用时获得具体类型 TMyInterface<T>.GetItem()不仅仅是 System.Object 类型的实例。

提前致谢! :-)

补充:我说的是接口本身:IMyInterface继承自IMyInterface,并且它们都有 GetItem() 方法(IMyInterface.GetItem() 返回类型 T,而 IMyInterface.GetItem() 返回类型 System.Object)。问题是,如果我们的代码只有这两个接口,即没有派生具体类,编译源代码后会遇到编译器警告。


他们不这样做,因为他们将一个版本编译为显式接口方法实现。它看起来像这样:

public class SomeClassThatIsIEnumerable<T> : IEnumerable<T>
{
    public IEnumerator<T> GetEnumerator()
    {
       // return enumerator.
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return ((IEnumerable<T>)this).GetEnumerator();
    }
}

这种类型的构造的作用是使第一个 GetEnumerator 方法成为默认方法,而只有调用者首先将 SomeClassThatIsIEnumerable 转换为 IEnumerator 类型时才能访问另一个 GetEnumerator 方法,因此它避免了该问题。

编辑:根据上面的补充,您需要使用 new 关键字:

public interface IMyInterface
{
   object GetObject();
}

public interface IMyInterface<T> : IMyInterface
{
   new T GetObject();
}

// implementation:

public class MyClass : IMyInterface<string>
{
    public string GetObject() 
    {
        return "howdy!";
    }

    object IMyInterface.GetObject()
    {
        return GetObject();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IEnumerable.GetEnumerator() 和 IEnumerable.GetEnumerator() 的相关文章

  • 这可以用 Moq 来嘲笑吗?

    我正在努力模拟一些外部依赖项 并且在一个第三方类中遇到了麻烦 该类在其构造函数中接收另一个第三方类的实例 希望 SO 社区能给我一些指导 我想创建一个模拟实例SomeRelatedLibraryClass它的构造函数接受一个模拟实例Some
  • .NET Core 3 是否支持 TLS 1.3

    我正在使用 NET Core 3 0 制作仅支持 TLS 1 3 的代理 我看到 SslProtocols 中定义了 Tls13 12288 但在我的测试过程中 它只抛出异常 客户端和服务器无法通信 因为它们不具备通用算法 所以我的问题是
  • 如何检索 ComboBox 选定的值作为枚举类型?

    这是我的Enum code public enum EmployeeType Manager Worker 我将初始化ComboBox值 而表单将自身初始化为 combobox1 ItemsSource Enum GetValues typ
  • 检测 404 而不捕获异常

    简单功能 检查网络服务器是否返回非 200 HTTP 状态 Private Function RemoteFileOk ByVal Url As String As Boolean Dim req As HttpWebRequest Try
  • 如何获取 ASP.NET MVC 中当前的虚拟路径?

    如何从 ASP NET MVC 视图中获取当前路径 URL 如果没有办法将其获取到视图中 那么如何将其获取到控制器中以便将其传递到视图呢 EDIT 我不需要 url 的协议和主机部分 这将为您返回视图中的 url
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 检测笔记本电脑盖子的关闭和打开

    是否可以检测笔记本电脑的盖子何时打开或关闭 从我读到的内容来看 这是不可能的 但 SO 之前已经帮助我完成了不可能的任务 我发现唯一可能朝着正确方向的事情是关于报告电源按钮所需的 IOCTL 的 MSDN 博客文章 https learn
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码
  • 将固定文档/XPS 打印为 PDF,而不显示文件保存对话框

    我有一个FixedDocument我允许用户在 WPF GUI 中预览 然后打印到纸张上 而不显示任何 Windows 打印对话框 如下所示 private void Print PrintQueueCollection printQueu
  • 如何使用 .net 2.0 中的 WebBrowser 控件检查 ajax 更新?

    我有一个网页正在使用 WebBrowser 控件在 winform 应用程序中显示 我需要在网页中的 HTML 发生变化时执行一个事件 但是 我找不到通过 Ajax 更新页面时触发的事件 DocumentComplete FileDownl
  • C# 为所有对象订阅相同的事件处理程序是线程安全的吗

    我的项目中有一种情况 我连接到多个服务器并监听事件 每当从服务器接收到事件时 Handler 就应该将该事件添加到公共队列中进行处理 所有连接都应将接收到的事件添加到队列中 foreach var item in collection Co
  • 实现“LazyProperty”类 - 这是一个好主意吗?

    我经常发现自己编写的属性是惰性评估的 就像是 if backingField null backingField SomeOperation return backingField 代码不多 但如果您有很多属性 它确实会重复很多次 我正在考
  • 从 DataGridViewSelectedRowCollection 复制列详细信息

    我有一个 DataGridView 它绑定到一个由设计时未知的 SQL 查询返回的 DataSet 好吧 我知道查询是什么 我只是不知道用户选择了哪一个 我允许用户从表中选择一组行并单击 确定 按钮 然后我想将这些行复制到新的 DataGr
  • C++/CLI 中的 Lambda 表达式

    如何在 C CLI 中使用 lambda 表达式 在 C 中 lambda 实际上只是用于创建委托的语法糖 C CLI支持代表 http www functionx com cppcli classes Lesson15c htm 因此您仍
  • 与常规 SQL 查询不同,为什么“linq to sql”查询以 FROM 关键字开头?

    为什么 linq to sql 查询以FROM与常规 SQL 查询不同的关键字 LINQ 模仿Logical Query processing在 SQL 中你有 8 SELECT 9 DISTINCT 11 TOP 1 FROM 2 ON
  • 如何在 IIS 中手动配置虚拟目录

    我正在尝试让外部 Visual Studio 解决方案在 Visual Studio Professional 2010 的本地副本中工作 当我打开该解决方案时 我看到一条错误消息 指出本地 IIS URL 尚未配置 我想创建一个虚拟目录吗
  • C#/.NET 3.5:转换扩展通用列表的对象

    我通过带有返回接口类型的方法的外观公开 API 并且在 C NET 3 5 中遇到了通用列表和继承的问题 我有两个接口 IMyList 实现 IList IMyItem 和三个类 MyList 实现 IMyList 扩展 List MyOt
  • GetEventLogs() 返回没有设置事件日志?

    采取以下 C 代码 EventLog eventLogs eventLogs EventLog GetEventLogs computername foreach EventLog evt in eventLogs statusMessag
  • 多线程 Web 应用程序

    我知道有很多情况都是在应用程序中使用多线程的好例子 但是什么时候最好在 net Web 应用程序中使用多线程 Web 应用程序几乎肯定已经由托管环境 IIS 等 实现多线程化 如果您的页面受 CPU 限制 并且想要使用多个核心 那么可以说多
  • 打印“X”个字符数与“X”字符串长度的所有可能组合(暴力破解)

    我正在尝试编写一个单词组合生成器 我的意思是打印 X 个字符数与 X 字符串长度的所有可能组合 首先 我需要说的是 我在 StackOverFlow 中看到了一个关于这个问题的问题 其中有很多单词生成器的答案来执行此操作 在不同的语言上 但

随机推荐