Выполните следующие действия:
ISelf<T>
с единственным параметром Self
, доступным только для чтения, который возвращает T
и ICloneable<out T>
, который происходит из ISelf<T>
, и включает метод T Clone()
. CloneBase
, который реализует кастинг protected virtual generic VirtualClone
MemberwiseClone
для переданного типа. VirtualClone
, вызывая метод базового клона, а затем делать все, что нужно сделать, чтобы правильно клонировать те аспекты производного типа, которые родительский метод VirtualClone еще не обработал. Для максимальной универсальности наследования классы, демонстрирующие функциональность публичного клонирования, должны быть sealed
, но должны быть получены из базового класса, который в противном случае идентичен, за исключением отсутствия клонирования. Вместо того, чтобы передавать переменные явного клонируемого типа, возьмите параметр типа ICloneable<theNonCloneableType>
. Это позволит подпрограмме, которая ожидает, что клонированная производная Foo
будет работать с клонируемой производной от DerivedFoo
, но также позволит создавать некланируемые производные Foo
.
Сам C# не определяет порядок байтов. Каждый раз, когда Вы преобразовываете в байты, однако, Вы делаете выбор. класс BitConverter имеет поле IsLittleEndian, чтобы сказать Вам, как это будет вести себя, но это не дает выбор. То же идет для BinaryReader/BinaryWriter.
Мой библиотека MiscUtil имеет класс EndianBitConverter, который позволяет Вам определять порядок байтов; существуют подобные эквиваленты для BinaryReader/Writer. Никакое использование онлайн не ведет, я боюсь, но они тривиальны:)
(EndianBitConverter также имеет часть функциональности, которая не присутствует в нормальном BitConverter, который должен сделать преобразования, оперативные в массиве байтов.)
Можно также использовать
IPAddress.NetworkToHostOrder(...)
, Если коротко, интервал или долго.
Прямой порядок байтов ре, короткий ответ (чтобы сделать я должен сделать что-либо), "вероятно, не, но это зависит от Ваших аппаратных средств". Можно свериться:
bool le = BitConverter.IsLittleEndian;
В зависимости от того, что это говорит, Вы могли бы хотеть инвертировать части своих буферов. С другой стороны, у Jon Skeet есть преобразователи определенного порядка байтов здесь (ищите EndianBitConverter).
Примечание, что itaniums (например), являются обратным порядком байтов. Большинство Intels является прямым порядком байтов.
Ре определенный UDP/IP...?
Необходимо знать о порядке байтов ЦП, а также сетевом порядке байтов.
Обычно для TCP/UDP comms, Вы всегда преобразовываете данные в сетевой порядок байтов с помощью htons
функция (и ntohs
и их связанные функции).
порядок сети Normally является обратным порядком байтов, но в этом случае (по некоторым причинам!) comms является прямым порядком байтов, таким образом, те функции не очень полезны. Это важно, поскольку Вы не можете принять UDP comms, они реализовали, следуют любым другим стандартам, он также делает жизнь трудной, если у Вас есть архитектура с обратным порядком байтов, поскольку Вы просто не можете обернуть все с htons
, поскольку Вы должны:-(
Однако, если Вы происходите из архитектуры Intel x86, тогда Вы уже - прямой порядок байтов, поэтому просто отправляете данные без преобразования.