C# struct结构类型

本文详细介绍了 C# 中的结构体(struct),包括其作为值类型的特点、定义方式、如何实现接口、成员访问限制等内容,并通过实例展示了结构体的构造函数及变量声明。

struct(结构)类型,是一种复杂的数据类型。它可以包含简单数据类型,也可以包含其他结构类型,以及方法、属性、索引器等。

1、struct结构类型是值类型,这也是与类最重要的区别。

2、结构类型可以实现接口,却无法继承另外一个结构。

3、结构类型成员,不能被声明为protected。

4、结构类型中,不能包含其自身。

 

结构类型定义简单的例子如下:

public struct point
        {
            public int x;
            public int y;
        }

point p;  //声明了一个point类型的结构变量p,可以通过p.x 和 p.y 访问。

//包含point类型结构
        public struct Rectangle
        {
            public point topLeft; 
            public point topRight;
            public bool boRec;
        }

Rectangle rec; //声明了一个Rectangle 类型的结构变量rec, 可以通过rec.topLeft.x 和 rec.topLeft.y 访问所包含结构中的变量。

下面是定义结构的构造函数:

 public struct point
        {
            public int x;
            public int y;
            public point(int x,int y) //定义构造函数
            {
                this.x = x; //对成员赋值
                this.y = y;
            }
        }
point p = new point(3, 5); //使用自定义构造函数初始化      

 


 

 

转载于:https://www.cnblogs.com/han1982/archive/2012/09/21/2697619.html

### C#struct 的使用方法和相关概念 在 C# 编程语言中,`struct` 是一种值类型,通常用于封装小型的、相关的变量集合。与 `class` 相比,`struct` 有其独特的特性和适用场景。 #### 基本概念 `struct` 是一种值类型,它存储在栈中,并且在传递时会进行深拷贝。这意味着每次将 `struct` 作为参数传递给方法或赋值给另一个变量时,都会创建一个新的副本。这种特性使得 `struct` 在某些特定情况下可以提供更好的性能优化[^1]。 #### 定义和使用 定义一个 `struct` 的语法与定义 `class` 类似,但有一些关键的不同点。以下是一个简单的 `struct` 定义示例: ```csharp public struct Point { public int X; public int Y; public Point(int x, int y) { X = x; Y = y; } public override string ToString() { return $"({X}, {Y})"; } } ``` 在这个例子中,`Point` 是一个包含两个整数字段 `X` 和 `Y` 的 `struct`。它还包含一个构造函数和一个重写的 `ToString()` 方法。 使用 `struct` 时需要注意以下几点: - **不可变性**:由于 `struct` 的复制特性,设计时应尽量保持其不可变性,以避免不必要的副作用[^2]。 - **大小限制**:微软建议不要将大于 16 字节的类型定义为 `struct`,因为这可能导致性能下降[^2]。 #### 适用场景 虽然 `struct` 和 `class` 在定义上相似,但它们的主要区别在于值类型和引用类型的特性。`struct` 适用于以下几种情况: - **小型数据结构**:当需要表示一个小型的、不可变的数据结构时,例如点、矩形等几何图形相关的类型。 - **性能优化**:在某些性能敏感的代码段中,使用 `struct` 可以减少内存分配和垃圾回收的压力。 - **互操作性**:在与非托管代码交互时,`struct` 可以更方便地映射到 C 或 C++ 的结构体[^1]。 #### 示例代码 下面是一个使用 `struct` 的完整示例: ```csharp using System; public struct Rectangle { public int Width; public int Height; public Rectangle(int width, int height) { Width = width; Height = height; } public int Area() { return Width * Height; } public override string ToString() { return $"Width: {Width}, Height: {Height}, Area: {Area()}"; } } class Program { static void Main() { Rectangle rect1 = new Rectangle(5, 10); Console.WriteLine(rect1.ToString()); // 修改 rect1 的宽度 rect1.Width = 15; Console.WriteLine(rect1.ToString()); // 将 rect1 赋值给 rect2 Rectangle rect2 = rect1; rect2.Width = 20; Console.WriteLine($"rect1: {rect1}"); Console.WriteLine($"rect2: {rect2}"); } } ``` 在这个示例中,`Rectangle` 是一个 `struct`,它包含宽度和高度字段,并提供了一个计算面积的方法。`Main` 方法展示了如何创建和修改 `Rectangle` 实例,并演示了值类型的复制行为。 #### 总结 尽管 `struct` 在某些情况下可以提供性能优势,但在大多数情况下,使用 `class` 是更安全的选择。`struct` 的主要缺点是其复制特性可能导致性能问题,特别是在处理大型数据结构时。因此,在设计 `struct` 时应谨慎考虑其适用场景,并遵循微软的最佳实践建议[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值