代码之家  ›  专栏  ›  技术社区  ›  mattruma

你能在linq2sql类上实现一个接口吗?

  •  8
  • mattruma  · 技术社区  · 15 年前

    我有一个名为IAddress的接口,还有一个名为Address的类,它处理街道、城市、州/省、邮政编码和国家。我有两个linq2sql类,它们具有所有的地址信息,并且希望实现接口i 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 回复  |  直到 15 年前
        1
  •  13
  •   Ryan Brunner    15 年前

    LinqToSQL类是分部类,因此您可以有一个额外的文件来实现LinqToSQL类的接口。

    只需将它添加到一个新文件中,使用与LinqToSQL类相同的类名:

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

    如果LinqToSQL类已经实现了必要的属性,那么应该只能包含接口声明。

    要回答有关使用不同名称的LinqToSQL属性来实现接口的注释,可以使用上面的语法,只需从Interface属性调用LinqToSQL属性,或者使用显式实现来保持更清晰的内容:

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

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