2010-04-09 69 views
8

我对L2S,Autogenerated DataContext和部分类的使用有问题。我抽象了我的datacontext和每个我使用的表,我正在实现一个带有接口的类。在下面的代码中,你可以看到我有接口和两个部分类。第一类就是确保自动生成的datacontext inherets Interface中的类。另一个自动生成的类确保Interface实现的方法。部分类中接口实现的问题

namespace PartialProject.objects 
{ 

public interface Interface 
{ 
    Interface Instance { get; } 
} 

//To make sure the autogenerated code inherits Interface 
public partial class Class : Interface { } 

//This is autogenerated 
public partial class Class 
{ 
    public Class Instance 
    { 
     get 
     { 
      return this.Instance; 
     } 
    } 
} 

} 

现在我的问题是,在自动生成的类实现的方法提供了以下错误: - >属性“实例”不能从接口“PartialProject.objects.Interface”属性。类型应该是'PartialProjects.objects.Interface'。 < -

任何想法如何解决这个错误?请记住,我无法编辑自动生成的代码中的任何内容。

提前致谢!

回答

12

就可以解决这个通过实施界面明确:

namespace PartialProject.objects 
{ 
    public interface Interface 
    { 
    Interface Instance { get; } 
    } 

    //To make sure the autogenerated code inherits Interface 
    public partial class Class : Interface 
    { 
    Interface Interface.Instance 
    { 
     get 
     { 
     return Instance; 
     } 
    } 
    } 

    //This is autogenerated 
    public partial class Class 
    { 
    public Class Instance 
    { 
     get 
     { 
      return this.Instance; 
     } 
    } 
    } 
} 
+0

这正是我所期待的:]非常感谢!很棒的作品 – Bas 2010-04-09 11:30:19

+1

已投票。谢谢你的好解决方案。我几乎“破解”了自己的想法,试图解决由接口强加的限制。 – 2011-08-15 19:09:01

+0

以防万一任何人在执行上述解决方案后遇到以下错误看看[这里](http://stackoverflow.com/questions/2669031/compilation-error-the-modifier-public-is-not-valid-for- this-item-while-crea):修饰符'public'对此项无效 - 基本上删除任何访问修饰符,因为这些属性将被强制为私有(当您考虑它时这很有意义)。 – dyslexicanaboko 2013-01-28 22:32:28

1

返回类型在C#中不是协变的。正如你不能改变自动生成的代码中,我看到的唯一的解决办法是改变接口:

public interface Interface<T> 
{ 
    T Instance { get; } 
} 

并相应地改变你的部分类:

public partial class Class : Interface<Class> { }