c# – 在基类中实现IEquatable

c# – 在基类中实现IEquatable,第1张

概述我首先使用ASP.NET MVC和EntityFramework代码. 我正在尝试为将保存到我的数据库的所有对象创建一个基类(这里称为Entity类). 有没有一种在基类中实现IEquatable的好方法?在我的实现中,我检查类型和ID – 这是一个很好的方法吗?这总是会返回最终派生类型吗?中级父母怎么样? 对象 public abstract class Entity : IEquatable< 我首先使用ASP.NET MVC和EntityFramework代码.

我正在尝试为将保存到我的数据库的所有对象创建一个基类(这里称为Entity类).

有没有一种在基类中实现IEquatable的好方法?在我的实现中,我检查类型和ID – 这是一个很好的方法吗?这总是会返回最终派生类型吗?中级父母怎么样?

对象

public abstract class Entity : IEquatable<Entity>{    public int ID { get; set; }    public string name { get; set; }    public Entity(string name)    {        this.name = name;    }    public overrIDe string ToString() { return name; }    public overrIDe int GetHashCode() { return ID.GetHashCode(); }    public overrIDe bool Equals(object obj) { return this == (Entity)obj; }    public bool Equals(Entity other) { return this == other; }    public static bool operator ==(Entity x,Entity y) { return Object.ReferenceEquals(x,y) ? true : ((object)x == null || (object)y == null) ? false : (x.GetType() == y.GetType() && x.ID.Equals(y.ID)); }    public static bool operator !=(Entity x,Entity y) { return !(x == y); }}public abstract class Content : Entity{    public Content(string name) : base(name)    {    }}public class Page : Content{            public string Body { get; set; }    public Page(string name) : base(name)    {    }}public class User : Entity{    public User(string name) : base(name)    {    }}

数据库

每个派生对象类型通常都存在于单独的数据库中.但是,会有一些具有中间继承父项的对象共享主键.

假设有三个表包含以下列:
    实体

>内容

> ID
>姓名

>页面

> ID
>身体

>用户

> ID
>姓名

因此,页面和内容表共享主键.

解决方法 >没有必要实现IEquitable,它不提供任何值(性能值,可读性值).
>在您的比较中,您仅依赖于引用相等性检查.您还应该检查ID相等性.
>您的GetHashCode()实现是次优的,您也应该包含实体的类型.
>您确定所有实体都具有name属性吗?在基类中,您应该包含在有界上下文的每个实体中呈现的属性.

在这里,我将详细描述这个主题:Domain object base class.

总结

以上是内存溢出为你收集整理的c# – 在基类中实现IEquatable全部内容,希望文章能够帮你解决c# – 在基类中实现IEquatable所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1230598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存