在C#3.5中是否有一种方法可以使用反射来设置对象属性?
例如:
MyObject obj = new MyObject();
obj.Name = "Value";
Run Code Online (Sandbox Code Playgroud)
我想obj.Name用反思来设定.就像是:
Reflection.SetProperty(obj, "Name") = "Value";
Run Code Online (Sandbox Code Playgroud)
有办法做到这一点吗?
是否有内置的方法,函数,API,普遍接受的方式等来转储Objective C中实例化对象的内容,特别是在Apple的Cocoa/Cocoa-Touch环境中?
我希望能够做类似的事情
MyType *the_thing = [[MyType alloc] init];
NSString *the_dump = [the_thing dump]; //pseudo code
NSLog("Dumped Contents: %@", the_dump);
Run Code Online (Sandbox Code Playgroud)
并显示对象的实例变量名称和值,以及可在运行时调用的任何方法.理想情况下,易于阅读的格式.
对于熟悉PHP的开发人员,我基本上寻找等效的反射函数(var_dump(),get_class_methods())和OO Reflection API.
我正在研究Objective-C,我想知道它是否具有反射的概念.到目前为止,我发现的文件都没有描述反思.
我正在为objective-c编写一个xml序列化类.
关键是给类一个类类型和一个xml文件.它应该返回一个包含数据的实例.
我已经有了它的工作,它确实有很多 - 处理原语(+ nsstring),用户定义的类和nsarrays.不处理指针或C数组.
显然,这很大程度上依赖于反思.
问题:当我设置某个类的实例的值时,我应该检查是否存在具有正确名称的属性,还是可以使用简单的反射设置变量?
这是我到目前为止使用的那种代码:
id newClass = class_createInstance(NSClassFromString(elementName), sizeof(unsigned));
Ivar nameVar = class_getInstanceVariable([newClass class], "name");
if (nameVar != nil)
object_setIvar(newClass, nameVar, [NSString stringWithString:@"George"]);
Run Code Online (Sandbox Code Playgroud)
此外,在这种任务之后,我应该发布什么吗?