C#中的类和结构

类和结构

类和结构都是创建对象的模版,每个对象包含数据,并提供处理和访问数据的方法。结构不同于类,因为结构不需要在堆上分配空间。类是引用类型,总是存储在堆(heap)上;结构是值类型,通常存储在栈(stack)上。而且结构不支持继承。

类和结构的重要区别:类类型的对象通过引用传递,结构类型的对象按值传递。

1.类

类包含有成员,成员可以是静态或者实例成员。静态成员属于类;而实例成员属于对象。静态字段的值对每个对象都是相同的,而每个对象的实例字段都可以有不同的值。静态成员关联static修饰符。

1.1构造函数初始化器

C#构造函数初始化器可以包含对同一个类的另一个构造函数的调用,也可以包含对直接基类的构造函数的调用(使用相同的语法,但应使用base关键字代替this)

初始化器中不能有多个调用。

this关键字仅调用参数最匹配的那个构造函数,构造函数初始化器在构造函数的函数体之前执行。

public Car(string description, uint nWheels)
{
_description = description;
_nWheels = nWheels;
}
public Car(string description ):this(description, 4) { }

2.结构

结构为值类型,不是引用类型。结构存储在栈中或存储为内联(如果它们是存储在堆中的另一个对象的一部分),其生存期的限制与简单的数据类型一样。结构不支持继承。

因为结构是值类型,所以new运算符与类和其他引用类型的工作方式不同。new运算符并不分配堆中的内存,只调用相应的构造函数,根据传送给他的参数初始化所有字段。

2.1结构的继承链

结构的继承链:每个结构派生自System.ValueType类,System.ValueType类又派生自System.Object。

ValueType并没有给Object添加任何新成员,但提供了一些更适合结构的实现方式。

3.结构和类的传递

public static void ChangeA(A a)
{
a.X = 2;
}`

`static void Main()
{
A a1 = new A { X = 1 };
ChangeA(a1);
WriteLine($"a1.X: {a1.X}");
}

结构按值传递,通过按值传递,ChangeA方法中的变量a得到堆栈中变量a1的一个副本,在方法ChangeA的最后修改、销毁副本之后,a1的内容从不改变。

类按引用传递,a变量把堆上的同一个对象引用为变量a1,当ChangeA修改a的X属性值时,把它改为a1.X,因为它是同一个对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a_dafei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值