It is really confusing to try to remember that a MemoryReadMemo is carried by a DatagramWriteMemo. Trying to remember that Write means something else ends up making me read the code wrong, or go to the wrong place looking for the code, such as the MemoryWriteMemo code.
I suggest:
- Rename DatagramWriteMemo to DatagramOutMemo
- Rename DatagramReadMemo to DatagramInMemo
That way, the four words (read, write, in, out) always have the same meaning instead of a purely contextual meaning.