在领域驱动设计中,我们引入了 a 的概念ValueObject,其中对象不带有标识。
Microsoft在其微服务系列中提供了它们的实现ValueObject,其中它们进行了覆盖Equals(),以便两个ValueObject具有相同值的 ' 被认为是相同的。
EqualOperator()我在下面列出了它们的实现,但我的问题与和方法有关NotEqualOperator()- 这是如何工作的?他们什么时候被叫?
我熟悉运算符重载,但这似乎是我以前从未见过的实现,而且我找不到任何有关它的文档。
这是实现:
public abstract class ValueObject
{
protected static bool EqualOperator(ValueObject left, ValueObject right)
{
if (ReferenceEquals(left, null) ^ ReferenceEquals(right, null))
{
return false;
}
return ReferenceEquals(left, null) || left.Equals(right);
}
protected static bool NotEqualOperator(ValueObject left,
ValueObject right)
{
return !(EqualOperator(left, right));
}
protected abstract IEnumerable<object> GetAtomicValues();
public override bool Equals(object obj)
{
if (obj == null || …Run Code Online (Sandbox Code Playgroud) 我试图找到一种创建材料样式的方法ExpandableListView,并且我使用的是位于材料设计网站上的示例。我下面的示例是:

当组扩展时,我试图复制出现在组顶部和底部的边框,但我不知道从哪里开始。
你能帮我吗?
我最近在和一个学生一起工作时遇到了一个场景,我在努力理解以下示例失败的原因。
我有一个指向对象的指针Game,而Game它本身也有指向的指针vector<Pair>。失败的行是的最后一行main(),其中我采用菊花链方法:
gamePointer->getPairs()->push_back(pair);
在上面的行中,getPairs()返回vector<Pair>*,然后push_back()调用将一个新值添加Pair到向量中。结果是read access violation。有趣的是,换出Game的vector<Pair>一个string,比方说,让我写了以下内容,它的工作原理:
gamePointer->getPairs()->append("B");
我简化了问题,并复制了完整的示例:
#include "pch.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Pair
{
private:
string previous;
string next;
public:
Pair();
Pair(string previous, string next);
string getPrevious();
string getNext();
void setPrevious(string previous);
void setNext(string next);
};
class Game
{
private:
vector<Pair>* pairs;
public:
Game();
vector<Pair>* getPairs();
void setPairs(vector<Pair>* …Run Code Online (Sandbox Code Playgroud)