C# 7.0类结构

class类

类是一种引用类型,存放在堆上
类中的只读属性ReadOnly只能从构造函数中赋值
get set方法的变化

       private string firstName;
        private string lastName;

        public string FirstName
        {
            set => firstName = value;
            get => firstName;
        }

属性自动赋值

public int Age { get; set; } = 42;

$对变量的直接使用

public string FullName => $"{FirstName}{LastName}";

struct

struct是值类型

试验

在7.0高级编程中有个实验,改变class和struct的变量的值,到底哪个会保留住

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
          A a=new A(3);
          B b=new B(3);
          Console.WriteLine($"before change a.x is{a.X}");
          Console.WriteLine($"before change b.x is{b.X}");
          ChangeA(a);
          ChangeB(b);
          Console.WriteLine($"afterchange a.x is{a.X}");
          Console.WriteLine($"afterchange b.x is {b.X}");
            Console.ReadLine();
           
        }

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

        public static void ChangeB(B b)
        {
            b.X = 2;
        }
    }

    public struct A
    {
        public int X { get; set; }

        public A(int x)
        {
            X = x;
        }
    }

    public class B
    {
        public int X { get; set; }

        public B(int x)
        {
            X = x;
        }
    }
}

结果是A.X=2还是3,B.X=2还是3?

输出

before change a.x is3
before change b.x is3
afterchange a.x is3
afterchange b.x is 2

可以看出A是一个struct,通过ChangeA方法后,得到了A的一个值类型a1,存放到堆上,它的作用只在方法体ChangeA中,a的内容不会被改变并会一直存为3(初始值)。
B是一个class,它是一个引用类型,通过changB方法,得到的b1会和b指向同一个栈上的内存地址,如果这时候改变b1的x信息会同步更改引用类型b的x值,因此就会得到2。

如果使用ref的话,是可以直接对值进行更改的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值