美文网首页
C#中struct和class的使用场景异同案例

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

作者: BobGuo | 来源:发表于2016-06-08 16:35 被阅读0次

    对于一般编程任务来说,保证基本类型(如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在设计上确实增加了心智负担。不过具体问题具体看吧,根据实际情况来。

    相关文章

      网友评论

          本文标题:C#中struct和class的使用场景异同案例

          本文链接:https://www.haomeiwen.com/subject/vmyjdttx.html