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

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

首先我们看下要实现的效果


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);

我们看下值类型的抽象方式


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);
}
}

现在看看引用类型的抽象方式


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);
}
}


具体哪种更好了,本来如果按照我的思维,自然是struct更好,因为它具有更好的性能,更低的内存开销。不过看了王总的《Swift 语言的设计错误》后感觉struct在设计上确实增加了心智负担。不过具体问题具体看吧,根据实际情况来。

你可能感兴趣的:(C#中struct和class的使用场景异同案例)