C#结构体,结构体与类的区别,运算符重载

1、结构体:在形式上和类很相似,都是一种数据结构,可以包括数据成员和方法。
struct 结构体名称
{
字段
属性
方法...
}
2、结构体与类的区别:
(1)、结构体是struct关键字,类是class关键字。
(2)、结构体不能在声明时直接对字段初始化,类可以。
(3)、结构体无论有没有声明构造函数,默认构造函数一直存在。类中一旦声明了构造函数,编译器都不再提供默认构造。
(4)、结构体不能显式地声明无参的默认构造函数(编译器会自动提供)。
(5)、结构体中的构造函数中必须为所有的字段初始化。
(6)、创建结构体对象可以用new,也可以不用(如果不用new,不能用属性赋值,只能把字段改成public去赋值)。类中必须用new。
(7)、结构体不能继承,也不能使用abstract或sealed关键字。
(8)、结构体是值类型,类是引用类型。
(9)、结构体不能定义析构函数。
3、结构体eg、
struct Point
{
private float x;
private float y;
public float X
{
get { return x;}
set { x = value;}
}
public float Y
{
get { return y;}
set { y = value;}
}
public Point (float x,float y)
{
this.x = x;
this.y = y;
}
public override string ToString ()
{
return string.Format ("({0},{1})",x,y);
}
}
public static void Main()
{
Point p1=new Point();
p1.X = 1;
p1.Y = 1;
Point p2 = p1;
Console.WriteLine (p2);
p2.X = 2;
p2.Y = 3;
Console.WriteLine (p1);
}
输出结果为:(1,1)
 (1,1)
对结构体而已,p2=p1,是把p1的值赋值给了p2,故而,改变p2的值,p1的值就不会改变。这是值类型
4、类 eg、
class CPoint
{
private float x;
private float y;
public float X
{
get { return x;}
set { x = value;}
}
public float Y
{
get { return y;}
set { y = value;}
}
public CPoint (float x,float y)
{
this.x = x;
this.y = y;
}
public override string ToString ()
{
return string.Format ("({0},{1})",x,y);
}
}
public static void Main()
{
CPoint c1 = new CPoint (1,1);
CPoint c2 =c1;
Console.WriteLine (c2);
c2.X = 2;
c2.Y = 3;
Console.WriteLine (c1);
}
输出结果为:(1,1)
 (2,3)
(1)、在定义类的对象时,如果直接用c2 =c1,c2得到的不会是c1的值,而是对象c1内存空间的编号,故而改变c2的值时,c1的值也会改变。
(2)、如果把CPoint c2 =c1;换成CPoint c2 = new CPoint (2,2);则改变c2的值之后,c1就不会改变了。因为CPoint c2 = new CPoint (2,2),是给c2新创建了一个内存空间,故而修改c2就不会改变c1的值了。
5、运算符重载:运算符通常用来对运算数进行运算,但是有时候我们所去操作的数的类型并不是默认类型时,就需要我们对运算符进行重载。
Note:(1)、只能重载已经存在的操作符
(2)、操作数的数目应该和原始定义一致
(3)、至少有一个操作数是用户自定义类型
(4)、重载后优先级不变
eg、
class CPoint
{
private float x;
private float y;
public CPoint (float x,float y)
{
this.x = x;
this.y = y;
}
public override string ToString ()
{
return string.Format ("({0},{1})",x,y);
}
public static CPoint operator+(CPoint p1,CPoint p2)
{
CPoint p3 = new CPoint (p1.x+p2.x,p2.y+p2.y);
return p3;
}
public static CPoint operator-(CPoint p1,CPoint p2)
{
CPoint p3 = new CPoint (p1.x - p2.x, p1.y - p2.y);
return p3;
}
public static CPoint operator*(CPoint p1,CPoint p2)
{
CPoint p3 = new CPoint (p1.x * p2.x, p1.y * p2.y);
return p3;
}
public static CPoint operator/(CPoint p1,CPoint p2)
{
CPoint p3 = new CPoint (p1.x / p2.x, p1.y / p2.y);
return p3;
}
}
public static void Main()
{
CPoint p1 = new CPoint (2,3);
CPoint p2 = new CPoint (7,8);
CPoint p3 = p1 + p2;
Console.WriteLine (p3);
CPoint p4 = p1 - p2;
Console.WriteLine (p4);
CPoint p5 = p1 * p2;
Console.WriteLine (p5);
CPoint p6 = p1 / p2;
Console.WriteLine (p6);
}
输出结果为:(9,16)
 (-5,-5)
 (14,24)
 (0.2857143,0.375)
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页