Прежде всего, вам следует избегать использования этого; C # - строго типизированный язык, поэтому используйте преимущества безопасности и производительности типа, которые сопровождают этот аспект.
Если у вас есть законная причина для получения и установки значения свойства динамически (другими словами, когда тип и / или имя свойства не могут быть определены в коде) Мне нужно использовать отражение.
Наиболее интересным способом было бы следующее:
object value = typeof(YourType).GetProperty("PropertyName").GetValue(yourInstance);
...
typeof(YourType).GetProperty("PropertyName").SetValue(yourInstance, "value");
Однако вы можете кэшировать объект PropertyInfo
, чтобы сделать его более читаемым:
System.Reflection.PropertyInfo prop = typeof(YourType).GetProperty("PropertyName");
object value = prop.GetValue(yourInstance);
...
prop.SetValue(yourInstance, "value");
Что вы делаете неправильно, так это то, что вы не запускаете цикл обработки событий Qt. то есть это неверно:
int main(int argc, char *argv[])
{
MyUDP *myUDP = new MyUDP(0);
myUDP->initSocket(port);
while (true) {
usleep(1000);
}
return 0;
}
... вместо этого у вас должно быть что-то вроде этого:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// connect needs to occur after QCoreApplication declaration
MyUDP *myUDP = new MyUDP(0);
myUDP->initSocket(port);
return app.exec();
}
... это внутри вызова app.exec()
, где приложение Qt тратит большую часть своего времени (app.exec()
не вернется, пока Qt не захочет выйти), и именно там Qt будет обрабатывать запросы ввода / вывода вашего UDP-сокета и потребности в сигнализации.