8

L2S、自動生成された DataContext、および部分クラスの使用に関する問題について質問があります。データコンテキストを抽象化し、使用するすべてのテーブルに対して、インターフェイスを持つクラスを実装しています。以下のコードでは、Interface と 2 つの部分クラスがあることがわかります。最初のクラスは、自動生成された datacontext のクラスが Interface を継承していることを確認するためのものです。もう 1 つの自動生成されたクラスは、Interface からのメソッドが実装されていることを確認します。

namespace PartialProject.objects
{

public interface Interface
{
    Interface Instance { get; }
}

//To make sure the autogenerated code inherits Interface
public partial class Class : Interface { }

//This is autogenerated
public partial class Class
{
    public Class Instance
    {
        get
        {
            return this.Instance;
        }
    }
}

}

今私の問題は、自動生成されたクラスに実装されたメソッドが次のエラーを出すことです: タイプは「PartialProjects.objects.Interface」である必要があります。<-

このエラーを解決する方法はありますか? 自動生成されたコードでは何も編集できないことに注意してください。

前もって感謝します!

4

2 に答える 2

12

インターフェイスを明示的に実装することで、これを解決できます。

namespace PartialProject.objects
{
  public interface Interface
  {
    Interface Instance { get; }
  }

  //To make sure the autogenerated code inherits Interface
  public partial class Class : Interface 
  {
    Interface Interface.Instance 
    {
      get
      {
        return Instance;
      }
    }
  }

  //This is autogenerated
  public partial class Class
  {
     public Class Instance
     {
        get
        {
          return this.Instance;
        }
     }
  }
}
于 2010-04-09T11:22:50.013 に答える
1

C# では、戻り値の型は共変ではありません。自動生成されたコードを変更することはできないので、私が見る唯一の解決策はインターフェースを変更することです:

public interface Interface<T>
{
    T Instance { get; }
}

それに応じて部分クラスを変更します。

public partial class Class : Interface<Class> { }
于 2010-04-09T10:07:20.170 に答える