我将如何创建一个父级和一个子级,并为子级继承IEquatable函数?这是我的密码
public class Category : IEquatable<Category>
{
public string _Name { get; set; }
public string _Id { get; set;}
private string _HomeCategory { get; set; }
public string _prestaId { get; set; }
public bool _inUse { get; set; }
public Category(string Name, string Id, string HomeCategory, bool inUse)
{
_Name = Name;
_Id = Id;
_HomeCategory = HomeCategory;
_inUse = inUse;
}
public virtual bool Equals(Category other)
{
if (other == null)
return false;
if(this._Id == other._Id)
{
return true;
}
else { return false; }
}
public override int GetHashCode()
{
return this._Id.GetHashCode();
}
}
public class SubCategory : Category :
{
public string parentCategory { get; set; }
public SubCategory(string Name, string Id, string HomeCategory, bool inUse) : base(Name, Id, HomeCategory, inUse)
{
}
}因此,我必须反对和子范畴派生,但包含的方法不工作的子范畴,但它做的范畴,我做错了什么,我如何得出分类的方法,所以包含在一个列表的子类别,因为它的类型将工作?
发布于 2020-05-08 14:22:05
SubCategory确实继承了bool Equals(Category other),但它适用于任何Category实例--这意味着如果SubCategory和Category具有相同的Id,则它们将是“相等的”。
听起来,您需要IEquatable<SubCategory>的“自动”实现和bool Equals(SubCategory other)实现,这是不可能的。您需要显式地添加接口声明,但是实现应该非常简单:
public class SubCategory : Category , IEquatable<SubCategory>
{
public string parentCategory { get; set; }
public SubCategory(string Name, string Id, string HomeCategory, bool inUse) : base(Name, Id, HomeCategory, inUse)
{
}
public bool Equals(SubCategory other)
{
return ((Category).this).Equals((Category)other)
}
}发布于 2020-05-08 14:20:47
您似乎需要在您的IEquatable<SubCategory>上实现SubCategory。SubCategory的定义应该改为public class SubCategory:Category, IEquatable<SubCategory>。
如果没有这些,你就会有下一个行为:
var sub = new SubCategory { _Name = "1", parentCategory = "2" };
var x = new List<Category>();
x.Add(sub);
Console.WriteLine(x.Contains(new SubCategory
{
_Name = sub._Name,
parentCategory = sub.parentCategory
})); // prints "True"
var y = new List<SubCategory>();
y.Add(sub);
Console.WriteLine(y.Contains(new SubCategory
{
_Name = sub._Name,
parentCategory = sub.parentCategory
})); // prints "False"这是合理的,因为SubCategory是IEquatable<Category>,但不是IEquatable<SubCategory>,IEnumerable.Contains文档状态:
元素通过使用默认相等比较器( Default )将其与指定的值进行比较。
它在内部使用类中IEquatable<T>.Equals的实现。
https://stackoverflow.com/questions/61681160
复制相似问题