- 标题
C#中struct与class的区别详解
- 简介
在C#中,struct和class是两种定义类型的方式。它们有着许多相似之处,但也有着许多不同。正确理解和使用struct和class,能够更好的设计可维护、可扩展的程序,提高代码的表现力和效率。
-
区别
-
struct是值类型,class是引用类型
- struct和class都可以有方法、属性和字段
- struct不支持继承,class支持继承
- struct不支持实现接口的默认实现,必须每个位置实现接口的方法,class支持默认实现
-
struct适用于小型且不需要在堆中分配内存的对象,而class适用于更复杂的对象,需要在堆中分配内存
-
示例1
public struct Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}
public class Program
{
static void Main(string[] args)
{
Point point1 = new Point(0, 0);
Point point2 = point1;
point2.X = 10;
Console.WriteLine($"point1.X: {point1.X}, point2.X: {point2.X}");
}
}
在上述示例中,我们定义了一个Point结构体,它包含了两个int类型的字段X和Y;然后我们创建Point类型的point1实例,并将它的值赋给point2。接下来,我们将point2的X属性值修改为10。最后,我们可以看到point1.X和point2.X的值是不同的。这是因为我们操作的是两个不同的值类型对象,它们在内存中的位置不同,修改一个不会影响到另一个。
- 示例2
public class Rectangle
{
private int _width;
private int _height;
public Rectangle(int width, int height)
{
_width = width;
_height = height;
}
public virtual int Area()
{
return _width * _height;
}
public int Width
{
get { return _width; }
set { _width = value; }
}
public int Height
{
get { return _height; }
set { _height = value; }
}
}
public class Square : Rectangle
{
public Square(int size) : base(size, size)
{
}
}
public class Program
{
static void Main(string[] args)
{
Rectangle rectangle = new Rectangle(2, 3);
Console.WriteLine("Rectangle area: " + rectangle.Area()); //输出:Rectangle area:6
Square square = new Square(3);
Console.WriteLine("Square area: " + square.Area()); //输出:Square area:9
square.Width = 2;
Console.WriteLine("Square area after setting width: " + square.Area()); //输出:Square area after setting width: 6
Rectangle square2 = new Square(4);
Console.WriteLine("Square2 area: " + square2.Area()); //输出:Square2 area:16
square2.Width = 3;
Console.WriteLine("Square2 area after setting width: " + square2.Area()); //输出:Square2 area after setting width: 12
}
}
在上述示例中,我们定义了一个Rectangle类,它包含了两个int类型的字段Width和Height;然后我们创建Rectangle类型的rectangle实例,输出它的面积;接着我们定义一个Square类,它是继承自Rectangle的,同时它重写了Area方法,使Square类可以根据宽和高计算出它的面积;我们创建Square类型的square实例,并输出它的面积,接着设置它的宽度为2并输出面积,我们可以看出这样的设置不影响它的面积计算。最后,我们将Square类型的square2实例赋值给Rectangle类型的变量square2,输出它的面积,接着设置它的宽度为3并输出面积,我们可以看到square2的宽度变大后,由于修改了父类Rectangle的Width值,其面积也相应变化了。
- 总结
通过上面两个示例和本文对struct和class的详细说明,我们可以清楚的认识到它们之间的区别,更好的把握它们的各自优势和局限性。无论选择哪种类型,都需要仔细考虑其适用情况并满足需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中struct与class的区别详解 - Python技术站