C#中struct和class的使用场景异同案例

对于一般编程任务来说,保证基本类型(如int等)实际是值拷贝一般就足够我们编码抽象了,不过还有一些情况下,除了基本的值类型外,也希望每次变量传递,都能获得值拷贝的效果。如以下伪代码

首先我们看下要实现的效果
<pre>
start = new Point(1, 2);
end = new Point(3, 4);
line1 = Line(start, end);
line2 = Line(start, end);
line1.move(1, 1);
line2.move(2, 2);
</pre>

我们看下值类型的抽象方式
<pre>
struct Point { //struct是值类型
int x, y;
public move (off_x, off_y) {
x += off_x;
y += off_y;
}
}

class Line {
private Point start;
private Point end;
public move(int off_x, int off_y) {
start.move(off_x, off_y);
end.move(off_x, off_y);
}
}
</pre>

现在看看引用类型的抽象方式
<pre>
class Point { //class是引用类型,而Point经常作为一个整体变化,所以这里不提供修改功能
int x, y;
public move (off_x, off_y) {
return new Point(x + off_x, y + off_y);
}
}

class Line {
private Point start;
private Point end;
public move(int off_x, int off_y) {
start = start.move(off_x, off_y);
end = end.move(off_x, off_y);
}
}
</pre>
具体哪种更好了,本来如果按照我的思维,自然是struct更好,因为它具有更好的性能,更低的内存开销。不过看了王总的《Swift 语言的设计错误》后感觉struct在设计上确实增加了心智负担。不过具体问题具体看吧,根据实际情况来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,951评论 19 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,211评论 30 472
  • 这学期教务处给的课程表是这样的,上课还得计算着这周是星期几实在是麻烦,所以提供了之前的课表模板,大家可以把自己的课...
    LuckyJing阅读 1,801评论 0 2
  • 最近家人、朋友很多次的询问我早起的事情,也心疼我每天那么早,减少了睡眠。如果透过现象看本质的话,表面上我是在早起,...
    云朵倩倩阅读 484评论 1 7