Как реализовать интерфейс в производном классе или через частичные классы? - PullRequest
5 голосов
/ 18 января 2012

У меня есть частичный класс, сгенерированный инструментом.

Foo.cs

public partial class Foo {
    [SomeAttribute()]
    public string Bar {get;set;}
}

Мне нужно реализовать следующий интерфейс для Foo, не касаясь Foo.cs:

IFoo.cs

public interface IFoo {
    string Bar {get;set;}
}

Расширение Foo также возможно, но повторная реализация свойства Bar - нет.

Можно ли это сделать?

Ответы [ 3 ]

8 голосов
/ 18 января 2012

Что мешает вам сделать это снова в другом файле?

public partial class Foo : IFoo
{
}

Поскольку свойство Bar уже существует, его не нужно переопределять.

Или в новом классе

public class FooExtended : Foo, IFoo
{
}

Опять же, вам не нужно реализовывать Bar, так как Foo уже реализует его.

1 голос
/ 18 января 2012

Поскольку Bar является приватным, вот что вы ищете:

public partial class Foo : IFoo
{
    string IFoo.Bar
    {
        get
        {
            return this.Bar;  // Returns the private value of your existing Bar private field
        }
        set
        {
            this.Bar = value;
        }
    }
}

В любом случае, это сбивает с толку, и по возможности его следует избегать.

EDIT : Хорошо, вы изменили свой вопрос, так как Bar теперь общедоступен, проблем больше нет, поскольку Bar всегда реализован в Foo.

1 голос
/ 18 января 2012

Вы можете создать частичный класс для Foo, который реализует IFoo, но со свойством Bar, не являющимся публичным, оно не будет работать.

Если свойство Bar было общедоступным:

partial class Foo
{
    public string Bar { get; set; }
}

interface IFoo
{
    string Bar { get; set; }
}

partial class Foo : IFoo
{

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