侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

C#基础加强(3)之值、引用类型及结构体

zze
zze
2019-07-23 / 0 评论 / 0 点赞 / 441 阅读 / 1822 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

值、引用类型

介绍

引用类型派生自 System.Object ,而值类型均隐式派生自 System.ValueType

其实 System.ValueType 也是继承自 System.Object ,只不过它是特立独行的一个分支。

值类型

数值类型、布尔值、结构、枚举都是值类型。例:

[TestFixture]
public class Tests
{
    [Test]
    public void Test()
    {
        // 数值类型
        Console.WriteLine(1 is ValueType); // true
        // 布尔类型
        Console.WriteLine(true is ValueType); // true
        // 结构类型
        Console.WriteLine(new Person() is ValueType); // true
        // 枚举类型
        Console.WriteLine(EnumTest.Item1 is ValueType); // true
    }
}

public struct Person{}

public enum EnumTest
{
    Item1 = 1
}

引用类型

字符串、数组、类、接口等都是引用类型。

值、引用类型的区别

  • 引用类型变量的赋值只会复制对对象的引用,引用的对象存放在堆内存。
  • 值类型变量赋值会深拷贝一个副本,且值类型变量存放在栈内存,且所有的值类型都为被编译器识别为密封类。

结构体

介绍

结构体是一种值类型,它的定义与普通类对象相似,只不过需要将定义类的关键字 class 换成 struct 。对于结构体,不像类那样存在继承,即一个结构不能从另一个结构或类继承。但是结构是从基类 Object 继承。

示例

[TestFixture]
public class Tests
{
    [Test]
    public void Test()
    {
        var person1 = new Person();
        person1.Id = 1;
        person1.Name = "张三";

        Person person2 = person1;
        person1.Name = "李四";
        Console.WriteLine(person2.Name);
        // 张三
        
        Console.WriteLine(person1 is ValueType);
        // True
    }
}

public struct Person
{
    private int id;

    private string name;

    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}``
0

评论区