c# - LINQ2SQL 中用于共享常用方法的抽象类

标签 c# linq-to-sql abstract-class

我在尝试实现由 linq2sql 设计器创建的两个类之间的共享方法/属性时遇到了问题。

我的两个类有两个主要属性(来自数据库模型):

public partial class DirectorPoll
{
    public bool Completed {get; set;}
    public bool? Reopen { get; set; }
    //more properties
}

public partial class StudentPoll
{
    public bool Completed {get; set;}
    public bool? Reopen { get; set; }
    //more properties
}

现在例如我创建一个抽象类:

public abstract class GenericPoll
{
    public abstract bool Completed { get; set; }
    public abstract bool? Reopen { get; set; }

    public bool CanEdit
    {
        get
        {
            if (Completed == false) return true;
            if (Reopen.GetValueOrDefault(false) == false) return false;
            return true;
        }
    }
}

然后

public partial class DirectorPoll : GenericPoll
public partial class StudentPoll: GenericPoll

但是当我尝试编译时它说“Director 没有实现继承的抽象成员 GenericPoll.Completed.get”。但它就在那里。所以我想我不得不对设计器自动生成的属性进行覆盖,但是如果我稍后更新数据库并重新编译它会给我同样的错误。

我想我可能在这里遗漏了一些东西,但我尝试了不同的方法但没有成功。 ¿那么除了在我的每个部分类中实现 CanEdit 之外,我还能在这里做什么?谢谢

最佳答案

它没有作为override 实现,因此不算数。但是,隐式接口(interface)实现确实很重要,所以这是可行的:

partial class DirectorPoll : IGenericPoll {}
partial class StudentPoll : IGenericPoll {}
public interface IGenericPoll
{
    bool Completed { get; set; }
    bool? Reopen { get; set; }
}
public static class GenericPoll {
    public static bool CanEdit(this IGenericPoll instance)
    {
        return !instance.Completed || instance.Reopen.GetValueOrDefault();
    }
}

关于c# - LINQ2SQL 中用于共享常用方法的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3461894/

相关文章:

c# - Matlab 的 C#(或 C++)关键字 'using' 是否有等效项?

c# - 从分组元素中选择多个

linq-to-sql - 使用Linq选择N个随机记录

c++ - 如何使用 C++ 返回一个抽象类

c# - 如何防止提供扩展方法的公共(public)类出现在 Intellisense 中?

c# - 填充 asp :Image with an image selected within an asp:FileUpload control

c# - 序列化从 LINQ to SQL 生成的类

c# - 如何通过两种不同类型的字段对 linq 查询结果进行排序

java - 从另一个类扩展的类可以使用具有不同返回类型的相同方法吗?

C++ 抽象类还是接口(interface)类?