是用类还是结构体定义合适?

zheng518 2013-10-05 10:58:51
乍看题目比较简单,但是我在实际运用中出现难题,特来和大家交流下哈。
我想做个工具软件,专门管理和统计机房的设备配置信息。大致的需求如下:
公司有多个机房,每个机房有服务器(不同品牌)、交换机、路由器、网关等设备。每个机房这些东西差不多。
我想通过这个工具软件能对这些设备管理和维护,比如记录IP、性能配置、使用年限。我不太想用数据库记录,直接建立内存数据,操作快捷方便。
因此,我首先想到类,如定义机房类,机房类里面再引用服务器类、交换机类等等,而服务器类又引用了IP地址、网络端口、安装软件等等
但是一想,这样定义类,多个机房怎么办?每个服务器下有相同的属性配置怎么办?他们的值会改变的。所以想用结构体,发现比较麻烦。各位有什么好的建议。
...全文
380 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 zheng518 的回复:
不希望更改啊,每个对象都是独立的,其属性可能相同,也可能不同。但是我看类是引用类型,我如果修改则其他对象对应的属性会更改,我有点困惑。呵呵
“我看类是引用类型,我如果修改则其他对象对应的属性会更改”这个说法,我只能建议你还是别纸上谈兵死抠字眼。 你还是给出实际的代码来说明“对象的属性会更改”吧?!
吉普赛的歌 2013-10-05
  • 打赏
  • 举报
回复
感觉楼主编程还没有入门
  • 打赏
  • 举报
回复
类型和对象,是两个不同的概念。类型就好像是名称抽象,而对象则是活生生地并发的存在。就好像我们说“人需要吃饭穿衣”,这里的“人”是类型,这个话是说的所有人的抽象,是几十亿个个体的抽象名词儿,而不是单指某一个人。 你首先所谓的“机房”,是指抽象的结构化描述,表示机房拥有服务器、路由器等类型的实物,而路由器又拥有IP地址、使用期限等类型的附属属性,这些属性看起来是没有体积的、智慧的,但是仍然是实实在在的。 几十个机房的(没有体积的、智慧的)数据结构,我们都可以用我们关于“一个”机房的抽象的蓝图来描述。成千上万台服务器,我们也可以用这个蓝图上的“一个”服务器的抽象的蓝图来描述。这就是类型关联图的作用(如果学一点UML入门概念的话)。 基于对象(类)的数据结构设计,跟实现时的编程语言没有什么关系。不管是什么class、struct、interface、或者是别的什么描述,都不会影响“类型”这个概念。不管你是用一堆class,还是struct,或者你只是用一堆int[]来代表这些对象,你都要先分析出基本的类型关联,作为对象(类型)分析。 当你连基本的对象关联都没有搞清楚的时候(更不要说各种动态建模设计了),此时纠结于class还是struct,这就是一种毫无效率的干扰行为。
threenewbee 2013-10-05
  • 打赏
  • 举报
回复
你需要为每个对象去new一个新的。 比如: 机房 dc1 = new 机房(); 机房 dc2 = new 机房(); 服务器 srv1 = new 服务器(); 服务器 srv2 = new 服务器(); dc1.服务器.Add(srv1); dc2.服务器.Add(srv2); 这样你修改dc1.服务器就不会影响dc2了。
zheng518 2013-10-05
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
[quote=引用 4 楼 zheng518 的回复:] [quote=引用 1 楼 caozhy 的回复:] 你没有分清楚类和对象,多个机房只是多个机房类的对象而已,不需要定义多个机房类。
这个我明白,我只是定义一个机房类,多个机房就是对应的对象,但是每个对象的属性值不一样,我一旦更改了任意一个对象的值,其他机房对象的对应的属性将更改。[/quote] 你希望更改还是不希望更改? 如果希望更改,有两个办法,让这个属性指向一个共享的变量,或者通过事件广播。[/quote] 不希望更改啊,每个对象都是独立的,其属性可能相同,也可能不同。但是我看类是引用类型,我如果修改则其他对象对应的属性会更改,我有点困惑。呵呵
threenewbee 2013-10-05
  • 打赏
  • 举报
回复
引用 4 楼 zheng518 的回复:
[quote=引用 1 楼 caozhy 的回复:] 你没有分清楚类和对象,多个机房只是多个机房类的对象而已,不需要定义多个机房类。
这个我明白,我只是定义一个机房类,多个机房就是对应的对象,但是每个对象的属性值不一样,我一旦更改了任意一个对象的值,其他机房对象的对应的属性将更改。[/quote] 你希望更改还是不希望更改? 如果希望更改,有两个办法,让这个属性指向一个共享的变量,或者通过事件广播。
zheng518 2013-10-05
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
你没有分清楚类和对象,多个机房只是多个机房类的对象而已,不需要定义多个机房类。
这个我明白,我只是定义一个机房类,多个机房就是对应的对象,但是每个对象的属性值不一样,我一旦更改了任意一个对象的值,其他机房对象的对应的属性将更改。
linuxca 2013-10-05
  • 打赏
  • 举报
回复
threenewbee 2013-10-05
  • 打赏
  • 举报
回复
类和结构体其实和你的逻辑设计无关,结构体可以视作一种特殊的类 之所以用结构体,主要是出于性能的考虑。
threenewbee 2013-10-05
  • 打赏
  • 举报
回复
你没有分清楚类和对象,多个机房只是多个机房类的对象而已,不需要定义多个机房类。

110,532

社区成员

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

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

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