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
的话,是可以直接对值进行更改的