Проблема с интерфейсной реализацией в частичных классах

У меня есть вопрос относительно проблемы с L2S, Автоматически сгенерированным DataContext и использованием Частичных Классов. Я абстрагировал свой datacontext, и для каждой таблицы я использую, я реализую класс с интерфейсом. В коде ниже Вас видят, что у меня есть Интерфейс и два частичных класса. Первый класс должен просто там удостовериться, что класс в автоматически сгенерированном datacontext наследовал Интерфейс. Другой автоматически сгенерированный класс удостоверяется, что метод от Интерфейса реализован.

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;
        }
    }
}

}

Теперь моя проблема состоит в том, что метод, реализованный в автоматически сгенерированном классе, дает следующую ошибку:-> Свойство 'Экземпляр' не может реализовать свойство от интерфейса 'PartialProject.objects. Interface'. Типом должен быть 'PartialProjects.objects. Интерфейс'. <-

Какая-либо идея, как эта ошибка может быть разрешена? Следует иметь в виду, что я ничего не могу отредактировать в автоматически сгенерированном коде.

Заранее спасибо!

8
задан Bas 9 April 2010 в 09:58
поделиться

2 ответа

Вы можете решить это, реализовав интерфейс явно:

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;
        }
     }
  }
}
12
ответ дан 5 December 2019 в 12:57
поделиться

Типы возвращаемых данных не являются ковариантными в C #. Поскольку вы не можете изменить автоматически сгенерированный код, единственное решение, которое я вижу, - это изменить интерфейс:

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

И соответственно изменить частичный класс:

public partial class Class : Interface<Class> { }
1
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: