类:
类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
类有构造和析构函数
类可以继承和被继承
结构:
结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
结构没有构造函数,但可以添加。结构没有析构函数
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口
示例:
根据以上比较,我们可以得出一些轻量级的对象最好使用结构,但数据量大或有复杂处理逻辑对象最好使用类。
如:geoemtry(gis 里的一个概论,在 ogc 标准里有定义) 最好使用类,而 geometry 中点的成员最好使用结构
using system;
using system.collections.generic;
using system.text;
namespace example16
{
interface ipoint
{
double x
{
get;
set;
}
double y
{
get;
set;
}
double z
{
get;
set;
}
}
//结构也可以从接口继承
struct point: ipoint
{
private double x, y, z;
//结构也可以增加构造函数
public point(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}
public double x
{
get { return x; }
set { x = value; }
}
public double y
{
get { return x; }
set { x = value; }
}
public double z
{
get { return x; }
set { x = value; }
}
}
//在此简化了点状geometry的设计,实际产品中还包含project(坐标变换)等复杂操作
class pointgeometry
{
private point value;
public pointgeometry(double x, double y, double z)
{
value = new point(x, y, z);
}
public pointgeometry(point value)
{
//结构的赋值将分配新的内存
this.value = value;
}
public double x
{
get { return value.x; }
set { this.value.x = value; }
}
public double y
{
get { return value.y; }
set { this.value.y = value; }
}
public double z
{
get { return value.z; }
set { this.value.z = value; }
}
public static pointgeometry operator +(pointgeometry left, pointgeometry rigth)
{
return new pointgeometry(left.x + rigth.x, left.y + rigth.y, left.z + rigth.z);
}
public override string tostring()
{
return string.format("x: {0}, y: {1}, z: {2}", value.x, value.y, value.z);
}
}
class program
{
static void main(string[] args)
{
point tmppoint = new point(1, 2, 3);
pointgeometry tmppg1 = new pointgeometry(tmppoint);
pointgeometry tmppg2 = new pointgeometry(tmppoint);
tmppg2.x = 4;
tmppg2.y = 5;
tmppg2.z = 6;
//由于结构是值类型,tmppg1 和 tmppg2 的坐标并不一样
console.writeline(tmppg1);
console.writeline(tmppg2);
//由于类是引用类型,对tmppg1坐标修改后影响到了tmppg3
pointgeometry tmppg3 = tmppg1;
tmppg1.x = 7;
tmppg1.y = 8;
tmppg1.z = 9;
console.writeline(tmppg1);
console.writeline(tmppg3);
console.readline();
}
}
}
结果:
x: 1, y: 2, z: 3
x: 4, y: 5, z: 6
x: 7, y: 8, z: 9
x: 7, y: 8, z: 9
新闻热点
疑难解答
图片精选