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

离子漂浮物 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复制到当前对象内呢?除了用手动一个个值复制和反射方式外还有什么更好的方法吗?
...全文
121 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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)
{
//默认处理
}
......
}
..............
}



  • 打赏
  • 举报
回复
没试过,帮顶
天乐 2009-03-01
  • 打赏
  • 举报
回复
修正IClonable接口-->ICloneable接口
天乐 2009-03-01
  • 打赏
  • 举报
回复
实现IClonable接口,MSDN搜索一下

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧