static void Foo() { //public delegate int MarshalReadDelegate<T>(Udbus.Serialization.UdbusMessageReader reader, out T t); // This would actually probably be better, despite sample code. //public delegate T MarshalReadResultDelegate<T>(Udbus.Serialization.UdbusMessageReader reader, out int result); //public static int ReadString(UdbusMessageReader reader, out string value) Udbus.Serialization.MarshalReadDelegate<string> ds = Udbus.Serialization.UdbusMessageReader.ReadString; Udbus.Serialization.MarshalReadDelegate<Udbus.Containers.dbus_union> dvbool = Udbus.Serialization.UdbusMessageReader.ReadVariantBoolean; Udbus.Serialization.MarshalReadDelegate<Udbus.Containers.dbus_union> dvbyte = Udbus.Serialization.UdbusMessageReader.ReadVariantByte; //Udbus.Core.MarshalReadDelegate<Udbus.Containers.dbus_union> dvmulti = new Udbus.Core.MarshalReadDelegate<Udbus.Containers.dbus_union>(); //dvmulti += dvbool; //dvmulti += dvbyte; Udbus.Serialization.UdbusMessageReader reader = new Udbus.Serialization.UdbusMessageReader(null); Udbus.Containers.dbus_union u1 = new Udbus.Containers.dbus_union(); reader.ReadVariantByte(u1); reader.ReadVariantByte(out u1); MarshalEventTest met = new MarshalEventTest(); met.foo += dvbool; met.foo += dvbyte; met.Dude(reader, out u1); }