我有以下类(不编译):
public class Field {
public string fldName { get; set; }
public object fldValue { get; set; }
public Field() { }
public Field(string name, object value) {
fldName = name;
Type type = Type.GetType(value);
fldValue = Activator.CreateInstance(type);
if (value == null) fldValue = ""; // forces object to be a string
}
}
我正试图通过传入字符串或我创建的其他类来实现此功能。如果我设置:
fldValue = value;
它只通过引用复制对象,而不是实例化新类。我不确定这里是否需要通用,但我更愿意不这样做。我也不确定如果这个代码确实有效,我是否需要将参数对象深度复制到新的实例对象。
除了字符串之外,我要复制到fldValue的类的属性如下所示:
public class DateReminder {
public DateTime reminderDate {get; set;}
public bool remindDate { get; set; }
public int warningTime {get; set;}
public bool remindWarn { get; set; }
}
对于任何感兴趣的人,通过以下方式解决:
public class Field {
public string fldName { get; set; }
[XmlElement( typeof(string))]
[XmlElement(typeof(DateReminder))]
public object fldValue { get; set; }
public Field() { }
public Field(Field inField) {
this.fldName = inField.fldName;
if (inField.fldValue.GetType() == typeof(DateReminder)) {
fldValue = (DateReminder)inField.fldValue;
}
else fldValue = inField.fldValue;
}
public Field(string name, object value) {
if (value == null) {
value = "";
}
fldName = name;
fldValue = value;
}
}
和DateReminder有自己的复制构造函数。
答案 0 :(得分:0)
重要的是要理解value
变量的值是引用,而不是对象。该值通过语句
fldValue
fldValue = value;
所以是的,fldValue
将引用所引用的任何对象value
。
我建议在调用代码中而不是在构造函数中执行副本...否则你不会知道是否需要复制,或者确实如何创建副本。
你最终想要实现什么,以及什么对你不起作用?