Аналогичная альтернатива перегрузке оператора извлечения / вставки в C #, которая существует в C ++ - PullRequest
0 голосов
/ 02 июля 2018

В настоящее время я работаю над классом Packet для проекта C #.

В моей C ++-версии моего класса Packet у меня есть операторы извлечения и вставки, поэтому пакет с несколькими целыми числами / строками / и т. Д. Может быть встроен в как можно меньшее количество строк, как это возможно.

std::shared_ptr<Packet> p = std::make_shared<Packet>(PacketType::Test); //Create packet of type (Test)
*p << 3 << "John" << "Hates" << "Susan"; //append data to packet
myConn.SendPacket(p); //queue packet to be sent

Я пытаюсь выяснить, есть ли способ получить аналогичную функциональность в C # или я действительно буду вынужден иметь отдельную строку для каждого фрагмента данных, который подается / извлекается из пакета.

В C # я представляю, что эквивалент будет выглядеть примерно так ...

Packet p = new Packet(PacketType::Test); //Create packet of type (Test)
p.Append(3); 
p.Append("John"); 
p.Append("Hates");
p.Append("Susan");
myConn.SendPacket(p); //queue packet to be sent

Можно ли как-нибудь сократить количество строк кода, не оказывая негативного влияния на производительность? Я не ищу, чтобы заполнить данные в строку. Я хочу, чтобы он оставался в виде двоичных данных.

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете определить свой Append метод, как показано ниже:

public void Append(params object[] args)
{
    // todo: save your args here
}
Ключевое слово

params позволит вам добавить столько аргументов, сколько вы захотите (как в функции printf). Использование:

Packet p = new Packet(PacketType::Test); //Create packet of type (Test)
p.Append(3, "John", "Hates", "Susan");
myConn.SendPacket(p); //queue packet to be sent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...