c#专题——结构

一、我们什么时候创建strucut?什么时候使用类,参考以下两点:
1)当c#的预定义类型,比如int ,double等不能满足我们的需求的时候,比如我们想定义一个坐标,该坐标有X,Y,Z,并且都是double类型,那我们就可以考虑使用struct或者class,但是由于stuct所占的内存比较小时具有性能的优势,所以定义在小于16字节的类型时,我们使用struct,大于16字节时使用class(参考《c#本质论》);这里还有一个问题,我们如何知道一个结构所占的内存有多大呢?这里使用sizeof
struct Angle
{
public Angle(double degrees, double minutes)
{
this.Degrees = degrees;
this.Minutes = minutes;
}

        public double Degrees { get; set; }
        public double Minutes { get; set; }
        
    }
    调用:
   unsafe
        {
            int size = sizeof(Angle);//sizeof在判断结构体所占内存大小时,sizeof 运算符只能在不安全代码块中使用,并且
                                                 //结构体中成员不能有引用类型,如果有引用类型,引用类型所占的内存就不仅仅包含了
                                                 //栈中存储的地址(多少位机器就是多少位的地址,比如32位),还包括了堆中存储的
                                                 //数据。
        }

2)结构还可以包含 构造函数、 常量、 字段、 方法、 属性、 索引器、 运算符、 事件和 嵌套类型,但如果同时需要上述几种成员,则应当考虑改为使用类作为类型(参考《msdn》)。

2、如何使用,参考代码如下:
声明:

  struct Angle
        {

            public Angle(double degrees, double minutes, double seconds)
            {
                this.Degrees = degrees;
                this.Minutes = minutes;
                this.Seconds = seconds;
            }

            public double Degrees { get; set; }
            public double Minutes { get; set; }
            public double Seconds { get; set; }


            
        }

调用:

 Angle angle= new Angle(100, 200, 300);
            angle.Degrees = 400;
            angle.Minutes = 400;
            angle.Seconds = 100;

2、枚举
当我们为了增加代码的可读性时使用枚举,未使用枚举的代码:

 int country=0;
            switch (country)
            {
                case 0:
                    break;
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
              default :
                    break;
                    
            }

使用后:
枚举的定义:

enum Country
{
    China,
    American,
    Japan=4,
    France//则这个默认的值就会变成了5

}

枚举的使用:

 Country  country=Country.China ;
            switch (country)
            {
                case Country.China :
                    break;
                case Country.American :
                    break;
                case Country.Japan :
                    break;
                case Country.France :
                    break;
              default :
                    break;
                    
            }

枚举数组之间的转换

 enum Country1
    {
        China,
        American,
        Japan=4,
        France//则这个默认的值就会变成了5

    }

    enum Country2
    {
        China,
        American,
        Japan = 4,
        France//则这个默认的值就会变成了5

    }
 Country1[] country= (Country1[])(Array) new Country2[10];//必须将一个枚举先转换为Array类型,再仅从转换。

枚举和字符串之间的转换
1)枚举转字符串;

FileStatus fileStatus = FileStatus.Hidden;
            string fileStatusStr = fileStatus.ToString();

2)字符串转枚举(使用enum.parse来实现转换)

   FileStatus newFileStatu;
            newFileStatu = Enum.TryParse(fileStatusStr, out newFileStatu) ? newFileStatu :FileStatus.ReadAndWrite   ;

将枚举作为位标志

 [Flags]
    enum FileStatus
    {

        ReadOnly = 1 << 0,
        WriteOnly = 1 << 1,
        Hidden = 1 << 2,
        ReadAndWrite = 1 << 4

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

c#上位机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值