Можете ли вы реализовать интерфейс для класса Linq2Sql? - PullRequest
8 голосов
/ 22 октября 2009

У меня есть интерфейс под названием IAddress и класс Address, который обрабатывает улицу, город, штат / провинцию, почтовый индекс и страну. У меня есть пара классов Linq2Sql, которые имеют всю информацию об адресе и хотели бы реализовать интерфейс IAddress и передать его конструктору для Address, который будет загружать значения свойств.

Возможно ли иметь класс Linq2Sql и интерфейс через частичный класс, который я для него создал? Заранее спасибо!

Дополнительные комментарии

В моем классе есть свойство MailToStreet, которое я хочу сопоставить с IAddress.Street. Есть ли способ сделать это в частичном классе?

решаемые

Спасибо сообществу StackOverflow! Это было несложно! Вот мой окончательный код:

public partial class Location : IAddress
{
    string IAddress.Street
    {
        get { return this.Street; }
        set { this.Street = value; }
    }

    string IAddress.City
    {
        get { return this.City; }
        set { this.City = value; }
    }

    string IAddress.StateProvince
    {
        get { return this.StateProvince; }
        set { this.StateProvince = value; }
    }

    string IAddress.PostalCode
    {
        get { return this.PostalCode; }
        set { this.PostalCode = value; }
    }

    string IAddress.Country
    {
        get { return this.Country; }
        set { this.Country = value; }
    }
}

1 Ответ

13 голосов
/ 22 октября 2009

Классы LinqToSQL являются частичными классами, поэтому у вас может быть дополнительный файл, который реализует интерфейс для класса LinqToSQL.

Просто добавьте это в новый файл, используя то же имя класса, что и ваш класс LinqToSQL:

public partial class LinqToSqlClass : IFoo {
    public void Foo() {
        // implementation
    }
}

Если ваш класс LinqToSQL уже реализует необходимые пропорции, вы должны иметь возможность включать только объявление интерфейса.

Чтобы ответить на комментарий об использовании свойства LinqToSQL с другим именем для реализации интерфейса, вы можете использовать приведенный выше синтаксис и просто вызвать свойство LinqToSQL из свойства интерфейса, или, чтобы сохранить чистоту, используйте явную реализацию:

public partial class LinqToSqlClass : IFoo {
    void IFoo.Foo() {
        return this.LinqFoo(); // assumes LinqFoo is in the linq to sql mapping
    }
}

Используя этот синтаксис, клиенты, обращающиеся к вашему классу, не увидят избыточное свойство, используемое только для реализации интерфейса (оно будет невидимым, если объект не приведен к этому интерфейсу)

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