c# - 在 C# 中使用字符串和接口(interface)的字典

标签 c# generics

我有一个称为 IObSrc 的接口(interface),我有几个实现此接口(interface)的类称为 ObSrc1、ObScr2 等。

Interface IObSrc
{
  string id;
}

我还有一个名为 IDtSrc 的接口(interface),这个接口(interface)又由几个名为 DtSrc1、DtSrc2 的类实现。

Interface IDtSrc
{
  IObSrc getObject();
  Dictionary<string,IObSrc> getObjects();
}

当我从 DtSrc1 实现此接口(interface)并从 DtSrc1 返回 ObSrc1 时,没有问题,但是当我返回 Dictionary<string,ObSrc1> 时或 Dictionary<string,ObSrc2> ,我得到类型不匹配的指示。

public class DtSrc : IDtSrc
{
  public Dictionary<string,IObSrc> getObjects()
  {
    Dictionary<string,ObSrc1> val1 = new ...'
    ...
    return val1;
  }

}

我该如何解决这个问题。

* 已编辑 *

我还有一个问题,如果一个方法应该返回一个可以随实现而变化的泛型类型怎么办。

示例:

interface IDtSrc<T> where T:IObSrc
{ 
  T ExecuteObject(string objId);
}

这将用作

class DtSrc1 
{ 
  string ExecuteObject(string objId)
  {..}
}

class DtSrc2
{ 
 Dictionary<string,string> ExecuteObject(string objId)
 {..}
}

也请为此提出正确的程序。

最佳答案

你可以使用带有约束的泛型

interface IDtSrc<T> where T:IObSrc
{
  IObSrc getObject();
  Dictionary<string,T> getObjects();
}

但是您的 IDtSrc 实现只能返回一种类型的 IObSrc

关于c# - 在 C# 中使用字符串和接口(interface)的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8484461/

相关文章:

c# - 尽管未调用complete(),TransactionScope 仍不回滚

c# - 具有多个 child 的通用基类

c# - 从 List<T> 继承的类型不能分配给 List<T>

java - <T extends A> void foo(T t) 和 void foo(A a) 的区别

generics - 如何在 Rust 中定义具有不同 const 参数的结构族?

c# - .NET 应用程序最稳定的时间戳源是什么?

C# 位图填充

c# - 访问 DataTemplate 中的当前项

c# - X-HTTP-Method-Override 在 ASP.NET Web API 上给出 NotFound (404)

java - 泛型类的 XStream 反序列化返回 java.lang.Object