Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在第三方类型上实现Equals和GetHashCode的最干净/最好的方法是什么';你没有访问的权限吗?_C#_Design Patterns - Fatal编程技术网

C# 在第三方类型上实现Equals和GetHashCode的最干净/最好的方法是什么';你没有访问的权限吗?

C# 在第三方类型上实现Equals和GetHashCode的最干净/最好的方法是什么';你没有访问的权限吗?,c#,design-patterns,C#,Design Patterns,问题是您有第三方类型,例如下面的ClassA。我没有访问代码的权限,它也没有实现Equals和GetHashCode,因此我想我需要编写一个包装器类。Equals和GetHashCode impl应该使用所有私有成员字段 最好的方法是什么?是否有我应该使用的快捷方式或模式 谢谢 public class ClassA { public int FieldA {get; set;} public double FieldB { get; set; } public stri

问题是您有第三方类型,例如下面的ClassA。我没有访问代码的权限,它也没有实现Equals和GetHashCode,因此我想我需要编写一个包装器类。Equals和GetHashCode impl应该使用所有私有成员字段

最好的方法是什么?是否有我应该使用的快捷方式或模式

谢谢

public class ClassA
{
    public int FieldA {get; set;}
    public double FieldB { get; set; }
    public string FieldC { get; set; }
}

我将从ClassA继承并重写
Equals
GetHashCode


您需要将实现基于公共属性,因为您无法访问私有字段。

我将从ClassA继承并重写
Equals
GetHashCode


您需要将实现基于公共属性,因为您无法访问私有字段。

从ClassA继承您自己的类,然后在其中实现GetHashCode和Equals。

从ClassA继承您自己的类,然后在其中实现GetHashCode和Equals。

如上面的Griver和Driis所述-继承或聚合ClassA并基于a实现Equals财产


MSDN根据上面的Griver和Driis发布了一些指导原则-继承或聚合ClassA并基于a属性实现Equals


MSDN发布了一些指导原则

如果需要将
ClassA
用作字典键,则可以实现自己的类来实现
IEqualityComparer
,并将其传递给字典的构造函数。这允许您重写类型的
GetHashCode
Equals
方法。

如果需要将
ClassA
用作字典键,您可以实现自己的类来实现
IEqualityComparer
,并将其传递给字典的构造函数。这允许您重写类型的
GetHashCode
Equals
方法