在构造函数里怎么样将该类的一个实例设置为当前对象

离子漂浮物 2009-03-01 08:57:18

[Serializable]
public class InIFileData : mySerializable
{
[NonSerialized]
private const string IniFilePath = "";

public InIFileData()
{
InIFileData fileData = loadIniFormFile(IniFilePath);
if (fileData == null)
{
/*从文件获取对象失败,初始化对象*/
}
else
{
/*->从文件获取对象成功,将fileData对象复制到当前对象<-*/
}
}
}


以上是案例,大至意思是,InIFileData类是一个系列化到文件的类,在类初始化时从指定文件获取对象,然后将获取到的对象复制到当前对象,如果失败就初始化。
需要解决的问题是:如果将获取到的对象fileData复制到当前对象内呢?除了用手动一个个值复制和反射方式外还有什么更好的方法吗?
...全文
58 点赞 收藏 9
写回复
9 条回复
北京的雾霾天 2009年03月02日
需要一个个的进行设置。尤其是对引用类型的成员。
回复 点赞
iGouzy 2009年03月02日
静态方法或者拷贝构造函数是正解
回复 点赞
天乐_那由他 2009年03月02日
工厂模式 或 Prototype(原型)模式,很适合你的应用场景
回复 点赞
离子漂浮物 2009年03月02日
我说的不是单纯的对象复制,我是在构造函数中将已存对象复制到将要声明的对象中。

4楼vpjian 说的倒是让我想起一种方法,就是加一个静态方法来创建或初始化对象。这样就不用复制对象。嗯..再等等有没什么更好有解决办法...
回复 点赞
gisyellow 2009年03月01日
如果是浅表复制(引用类型仅复制引用)的话,使用MerberwiseClone()方法就可以了。如果完全复制(引用类型也逐位复制),则考虑使用ICloneable接口自己实现吧。。
回复 点赞
vpjian 2009年03月01日
两天前我也想这样做的,但后来发现这是不现实的,用起来太麻烦。最后决定用对象保存参数,将对象序列化保存到XML文件,用的时候从XML文件加载,这样做简单实用。

实现方法大致如下:

//基类,序列化和反序列化在这里实现。
[Serializable]
public abstract Class ConfigBase
{
[NonSerialized]
  public string FileName {get;set;}
public static T LoadConfig<T>(string fileName)
{
//从xml文件返序列化
...........
}
public void SaveConfig()
{
//序列化保存到xml文件
...........
}
}
//参数类定义,这里写几个可以属性就可以用了。
[Serializable]
public Class ConfigA:ConfigBase
{
public string A {get;set;}
public List<string> B {get;set;}
......
}
============================

public Class Class1
{
 ......
private ConfigA Config;
InitConfig()
{
......
Config = ConfigA.LoadConfig<ConfigA>(configFilePatch);
if(Config == null)
{
//默认处理
}
......
}
..............
}



回复 点赞
xueyuanlang_fushuai 2009年03月01日
没试过,帮顶
回复 点赞
天乐_那由他 2009年03月01日
修正IClonable接口-->ICloneable接口
回复 点赞
天乐_那由他 2009年03月01日
实现IClonable接口,MSDN搜索一下
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告