【问题标题】:Can you implement an interface on a Linq2Sql class?你能在 Linq2Sql 类上实现接口吗?
【发布时间】:2010-01-28 13:47:06
【问题描述】:

我有一个名为 IAddress 的接口和一个名为 Address 的类,用于处理街道、城市、州/省、邮政编码和国家/地区。我有几个具有所有地址信息的 Linq2Sql 类,并希望实现接口 IAddress,并将其传递给 Address 的构造函数,该构造函数将加载属性值。

是否可以通过我为它创建的部分类来实现 Linq2Sql 类和接口?提前致谢!

其他 cmets

在我的班级中,我有一个名为 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; }
    }
}

【问题讨论】:

  • 鉴于所有接口成员名称与实体类中的属性名称相同,这应该就足够了: public partial class Location : IAddress { }

标签: linq-to-sql interface


【解决方案1】:

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

通过使用此语法,访问您的类的客户端将不会看到仅用于实现接口的冗余属性(除非将对象强制转换为该接口,否则它将是不可见的)

【讨论】:

  • 在我的课堂上,我有一个名为 MailToStreet 的属性,我希望它映射到 IAddress.Street。有没有办法在部分类中做到这一点?
  • 只需将您的 MailToStreet 属性包装在部分类中的全新 Street 属性中...它就可以解决问题 ;o)
猜你喜欢
  • 2010-12-30
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
相关资源
最近更新 更多