相关疑难解决方法(0)

返回派生类型时"未实现接口"

以下代码:

public interface ISomeData
{
    IEnumerable<string> Data { get; }
}

public class MyData : ISomeData
{
    private List<string> m_MyData = new List<string>();
    public List<string> Data { get { return m_MyData; } }
}
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

错误CS0738:'InheritanceTest.MyData'未实现接口成员'InheritanceTest.ISomeData.Data'.'InheritanceTest.MyData.Data'无法实现'InheritanceTest.ISomeData.Data',因为它没有匹配的返回类型'System.Collections.Generic.IEnumerable'.

由于List <T>实现了IEnumerable <T>,因此可以认为我的类将实现该接口.有人可以解释一下这个不编译的理由是什么吗?

我可以看到,有两种可能的解决方案:

  1. 将接口更改为更具体,并要求实现IList.
  2. 更改我的类(MyData)以返回IEnumerable并实现原始接口.

现在假设我也有以下代码:

public class ConsumerA
{
    static void IterateOverCollection(ISomeData data)
    {
        foreach (string prop in data.MyData)
        {
            /*do stuff*/
        }
    }
}

public class ConsumerB
{
    static void RandomAccess(MyData data)
    {

        data.Data[1] = "this line is invalid if MyPropList …
Run Code Online (Sandbox Code Playgroud)

c#

39
推荐指数
3
解决办法
7000
查看次数

接口指定的属性的多态性

为什么这不起作用?

 public class ClassOptions {}

 public interface Inode {
    ClassOptions Options {get;}
 }            

public class MyClass : Inode {
  public ClassOptions Options { get; set; }
}           

public class ClassDerivedOptions : ClassOptions {
}

public class MyDerivedClass : Inode {
    public ClassDerivedOptions Options { get; set; } << does not implement INode...
}
Run Code Online (Sandbox Code Playgroud)

[编译器消息告诉我为什么它会中断但我想知道编译器为什么不通过它的原因 - 同样如果有任何解决方法?- 谢谢]

c# polymorphism c#-4.0

3
推荐指数
1
解决办法
735
查看次数

接口作为函数的参数

我有一个问题,希望有人可以帮助我一点.我有以下界面:

public interface ITaskService
{
    ITaskBase GetTask(IRequestBase request);
}
Run Code Online (Sandbox Code Playgroud)

我想实现这样的方法:

public ITaskBase GetTask(Request request) 
{

}
Run Code Online (Sandbox Code Playgroud)

请求是一个如下所示的模型:

public class Request:IRequestBase
{
    public DateTime CheckIn { get; set; }

    public DateTime CheckOut { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个编译错误,说该类没有实现接口ITaskService,但是我不明白为什么请求参数是从IRequestBase接口继承的

c# interface

2
推荐指数
1
解决办法
61
查看次数

c#对象接口返回类型协方差

C#编译器:

错误CS0738:Field<T>' does not implement interface memberField.Value.get'和最佳实现候选Field<T>.Value.get' return typeT'不匹配接口成员返回类型`object'

public interface Field
{
   object Value {get;}
}

public class MyField<T> : Field
{
   T _value;
   public T Value
   {
      get
      {
         return _value;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

为什么?List <T>在microsoft类中扩展List,但我作为用户(复制相同的设计模式)是不允许这样做的?为什么?

尝试T:对象也会产生编译错误......

我该如何解决?

关于同一主题的其他1.000.000个主题,说:
blablabla,'返回类型协方差',blablabla,'你不能'.

他们没有提出如何编译这种野兽的解决方案或解决方法.要求:
1)Field是一个不能使用泛型的接口.被称为"统一"的邪恶框架禁止泛滥.
2)"实现字段"的字段<T>具有通用T.

c# generics types covariance covariant-return-types

-5
推荐指数
1
解决办法
778
查看次数