当前位置:  开发笔记 > 编程语言 > 正文

在C#泛型中,Java通配符的等价物是什么

如何解决《在C#泛型中,Java通配符的等价物是什么》经验,为你挑选了1个好方法。

我正在开发一个应用程序,我需要调用泛型类的方法,而不关心实例的实际类型.像下面的Java代码:

public class Item{
  private T item;

  public doSomething(){...}
}

...
public void processItems(Item[] items){
 for(Item item : items)
   item.doSomething();
}

当时我很着急,所以我通过使用我需要调用的方法定义一个接口并使泛型类实现它来解决我的问题.

public interface IItem  
{
   void doSomething();
}

public class Item : IItem {
  private T item;

  public void doSomething(){...}
}

...
public void processItems(IItem[] items)
{
 foreach(IItem item in items)
   item.doSomething();
}

这种解决方法工作正常,但我想知道实现相同行为的正确方法是什么.

编辑:

我忘了提到调用者processItems不知道实际的类型.实际上,这个想法是作为参数传递的数组processItems可能包含混合类型.由于在.Net中不可能有这样的数组,因此使用非泛型基类或接口似乎是唯一的方法.



1> Jon Skeet..:

执行此操作的常规方法是使方法通用:

public void ProcessItems(Item[] items) {
  foreach(Item item in items)
    item.DoSomething();
}

假设调用者知道类型,类型推断应该意味着他们不必明确指定它.例如:

Item items = new Item(); // And then populate...
processor.ProcessItems(items);

话虽如此,创建一个指定类型不可知操作的非泛型接口也很有用.这在很大程度上取决于您的确切用例.


你在这里写java,Jon?
推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有