Можно ли разбить интерфейс на 2 частичных интерфейса и реализовать его в 2 частичных класса? - PullRequest
19 голосов
/ 19 августа 2011

Я делаю довольно обширные и постоянные модификации стороннего продукта для моего работодателя.Одним из основных соображений при реализации моего кода было максимально разделить его, чтобы интеграция изменений от поставщика была максимально безболезненной.До сих пор одним из наиболее полезных инструментов для достижения этой цели был частичный класс.Используя частичные классы, я могу хранить любые новые методы, которые мне нужно реализовать, в своем собственном файле.

Но сегодня у меня произошел сбой, и мне нужно кое-что решить, как.Допустим, мне нужно расширить следующий интерфейс.

public partial interface ICondition
{
  void MethodA();
  void MethodB();
}

, сделав интерфейс частичным и добавив файл с именем ICondition.CompanyName.cs

public partial interface ICondition
{
  void MethodC();
}

, что я хочу сделатьсостоит в том, чтобы реализовать интерфейс так же, как я объявил, с MethodA() и MethodB(), реализованными в одном файле частичного класса, и MethodC() в другом.

public partial class Condition : ICondition
{
   public void MethodA(){ }
   public void MethodB(){ }
}

и моим классом Condition.CompanyName.cs

public partial class Condition : ICondition
{
   public void MethodC() { }
}

Это, конечно, не работает, поскольку интерфейс должен быть реализован в одном файле.Я надеюсь, что есть какое-то объявление или немного синтаксической магии, о которой я не знаю, что позволит мне делать то, что я хочу, и хранить эти методы в отдельных файлах, но с тем же интерфейсом.

Edit

Это действительно работает, моя проблема заключалась в том, что у меня было два частичных класса в разных пространствах имен из-за глупой опечатки.Полагаю, сегодня утром я начал слишком рано, спасибо всем за ваше время и внимание.

Ответы [ 2 ]

9 голосов
/ 19 августа 2011

В этом случае вам не нужно иметь частичный интерфейс, вы все равно должны располагать методы там, где вам нужно.

Это, конечно, не работает, так как интерфейс должен быть реализован все в том же файле

Я не вижу, как ваш пример не работает, я просто сделал следующее:

partial interface IFoo
{
    void One();
    void Two();
}

partial class Class1 : IFoo
{
    public void Two()
    { }

    public void Three()
    { }
}

В одном файле.

partial interface IFoo
{
    void Three();
}

partial class Class1 : IFoo
{
    public void One()
    { }
}

В другом ...

3 голосов
/ 19 августа 2011

Может быть, ваши частичные классы не находятся в одной сборке?

В противном случае ваш пример должен работать нормально ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...