首页 > 代码库 > 何时使用Class?何时使用Struct?
何时使用Class?何时使用Struct?
(1) 结构体是值类型,它可以包含数据和方法;类是引用类型
(2) 结构体是值类型,不要求堆分配
(3) 结构体存储自身的数据在结构体中,而类存储一个动态对象的引用
(4) 结构体通常用于较小的数据结构
(5) 结构体会影响性能
(7) 构造函数是由新操作符调用的,但是其不会分配在堆上
(8) 一个结构体构造函数直接返回结构体值本身(存储在栈的临时位置),该值
在必要时被拷贝
(9) 对类而言,多个变量可以使用同一个对象的引用
(10)对类而言,对一个变量的操作可能会影响到相同引用的其它变量;但是对结构体而言不是
(11)结构体不支持特定的继承,隐式地继承类型对象
Demo
//PointStruct
Public Struct PointStruct
{
public int x;
public int y;
public PointStruct(int x, int y)
{
this.x=x;
this.y=y;
}
}
//PointClass
class PointClass(int x,int y)
{
public int x;
public int y;
public PointClass(int x,int y)
{
this.x=x;
this.y=y;
}
}
//Main Method
static void Main(string[] args)
{
PointStruct structPoint = new PointStruct();
structPoint.x = 10;
structPoint.y = 10;
Console.WriteLine("初始化结构体的值是" + structPoint.x +"," + structPoint.y);
ModifyStructPoint(structPoint);
Console.WriteLine("改后的结构体的值是" + structPoint.x +"," + structPoint.y);
Console.WriteLine();
PointClass classPoint = new PointClass(10,10);
Console.WriteLine("初始化类的值是" + classPoint.x +"," + classPoint.y);
ModifyClassPoint(classPoint);
Console.WriteLine("改后的类的值是" + classPoint.x +"," + classPoint.y);
Console.WriteLine();
}
//Method
static void ModifyStructPoint(PointStruct newStruct)
{
newStruct.x=20;
newStruct.y=20;
Console.WriteLine("执行ModifyStructPoint方法");
Console.WriteLine("修改的值是" + classPoint.x +"," + classPoint.y);
}
static void ModifyClassPoint(PointStruct newClass)
{
newClass.x=20;
newClass.y=20;
Console.WriteLine("执行ModifyStructPoint方法");
Console.WriteLine("修改的值是" + newClass.x +"," + newClass.y);
}
结果是:
10,10
20,20
10,10
10,10
20,20
20,20
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。