类与结构

本文深入探讨C#中的类(class)与结构(struct),解析两者存储位置的不同,介绍类的特性如引用类型、数据成员、函数成员等,同时讨论结构作为值类型的特点,以及C#中的ref参数和out关键字用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类 class 存储在堆(heap)上,是引用类型

数据成员

函数成员

ref参数:通过值传送变量是默认的,也可以迫使值参数通过引用传送给方法,要使用ref关键字,如果把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,则该方法对变量所作的任何改变都会影响原来对象的值。

ContractedBlock.gifExpandedBlockStart.gifCode
static void SomeFunction(int[] ints,ref int i)
{
    ints[
0]=100;
    i
=100;
}


SomeFunction(ints,
ref i);

out关键字,输出参数,用于函数返回多值时使用

 

ContractedBlock.gifExpandedBlockStart.gifCode
static void SomeFunction(out int i)
{
   i
=100;
}
public static int Main()
{
   
int i;//使用out关键字可以传入不初始化的参数
   SomeFunction(out i);
   Console.WriteLine(i);
   
return;
}

静态构造函数

 

ContractedBlock.gifExpandedBlockStart.gifCode
class MyClass
{
  
static Main()
  {
  }
}

 

用途:类有一些静态字段或者属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性,静态构造函数至多运行一次,并在类被引用之前执行,每个类只能带有一个静态构造函数,并且不能有参数

 

readonly 只读字段,readonly字段比const灵活的的多,允许把一个字段设置为常量,但可以执行一些运算来确定它的初值,规则是在构造函数中给只读字段赋值,只读字段可以只实例化的也可以只静态的,静态的需要显式声明

 

匿名类型 var与new 关键字一起使用时可以创建匿名类型,匿名类型只是一个继承了Object类的,没有名称的类,该类的定义从初始化器中推断,类似于隐式类型化的变量

ContractedBlock.gifExpandedBlockStart.gifCode
var captain=new {FirstName="James",MiddleName="T",LastName="Kirk"};

结构 struct存储在堆栈(stack)上是值类型包含数据成员,函数成员。

结构是值类型不是引用类型

 

结构不支持继承

结构的构造函数的工作方式不同于类,编译器总是提供一个默认的无参的构造函数,这是不允许替换的

使用结构可以指定字段在内存中如何布局

 

转载于:https://www.cnblogs.com/maginwei/archive/2009/03/16/1413201.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值