Похоже, что Вы кодируете в C#, которому назвали метод, Равняется тому Вашему классу, должен реализовать, необходимо ли хотеть выдержать сравнение, два объекта с помощью некоторой другой метрики, чем "являются этими двумя указателями (потому что объектные дескрипторы просто что, указатели) к тому же адресу памяти?".
я захватил некоторый пример кода от здесь :
class TwoDPoint : System.Object
{
public readonly int x, y;
public TwoDPoint(int x, int y) //constructor
{
this.x = x;
this.y = y;
}
public override bool Equals(System.Object obj)
{
// If parameter is null return false.
if (obj == null)
{
return false;
}
// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if ((System.Object)p == null)
{
return false;
}
// Return true if the fields match:
return (x == p.x) && (y == p.y);
}
public bool Equals(TwoDPoint p)
{
// If parameter is null return false:
if ((object)p == null)
{
return false;
}
// Return true if the fields match:
return (x == p.x) && (y == p.y);
}
public override int GetHashCode()
{
return x ^ y;
}
}
Java имеет очень похожие механизмы. Эти равняется () , метод является частью Объект класс, и Ваш класс перегружает его, если Вы хотите этот тип функциональности.
причиной, перегружающейся '==', может быть плохая идея для объектов, то, что, обычно, Вы все еще хотите быть в состоянии сделать, "они тот же указатель" сравнения. Для них обычно полагаются, например, вставляя элемент в список, где никакие дубликаты не позволяются, и часть Вашего материала платформы не может работать, если этот оператор перегружается нестандартным способом.
Если вы можете создать структуру и поместить в нее атрибут [DataContract]
- продолжайте и используйте его! Для WCF это не имеет значения - WCF требует только, чтобы класс или структура, которые используются, были помечены атрибутом DataContract, а все поля, которые должны быть включены в сериализованное сообщение, должны быть помечены [DataMember] Атрибут
.
Если вы проверите документы MSDN на DataContractAttribute , он показывает, что вы также можете использовать его в структуре:
[AttributeUsageAttribute(AttributeTargets.Class|
AttributeTargets.Struct|AttributeTargets.Enum,
Inherited = false, AllowMultiple = false)]
public sealed class DataContractAttribute : Attribute
ОБНОВЛЕНИЕ: относительно того, когда использовать структуру вместо класса (в общем, в .NET), см. этот вопрос SO здесь:
Когда мне следует использовать структуру вместо класса?
Однако, поскольку WCF действительно касается передачи сообщений (т.е. ваш клиент делает вызов метода, этот вызов и его параметры преобразуются в сериализованное сообщение, которое отправляется по сети, а затем повторно собирается на другом конце и превращается обратно в вызов метода), я не вижу никаких веских причин для использования структура
.
Я бы сказал, что все преимущества общего .NET не применимы в SOA-мире WCF (вы не передаете экземпляры классов или структур - см. Выше).