c# 类、构造函数、结构的区别


结构和类的区别

结构


类型

值类型

引用类型

继承

不能作为基类被继承

可以作父类被继承

构造函数

默认构造函数始终会被调用

如果自定义构造函数,默认的会被替换掉

析构函数

无析构函数

有默认析构函数

字段

不能在声明字段时直接给字段赋值

可以在声明时给字段赋值

静态构造函数

有一个

有一个

结构

1、不能显示定义默认无参的构造函数

结构 架构的区别 结构构造区别_构造函数

2、在结构中不能在声明字段时直接赋值

结构 架构的区别 结构构造区别_构造函数_02

在结构中想要给字段赋值有两种办法

方法1:在自定义有参构造函数时,传参,赋值

new有参构造,传参

结构 架构的区别 结构构造区别_构造函数_03


结构 架构的区别 结构构造区别_赋值_04

方法2:通过new默认构造函数,创建一个实例

通过实例名.字段的方式赋值(补:在类外访问类成员时,必须为public修饰)

结构 架构的区别 结构构造区别_赋值_05


结构 架构的区别 结构构造区别_字段_06


结构 架构的区别 结构构造区别_构造函数_07

完整代码

`using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;namespace structDemo1

{

class Program

{

static void Main(string[] args)

{

// 结构的字段赋值方式有两种。1 - 系统会调用有参构造函数,(实例化时传参数)

Person2 xiaohua = new Person2("female", "王小花");

Console.WriteLine($"sex:{xiaohua.sex},name:{}");// 结构的字段赋值方式有两种。2-会调用默认无参构造函数,在实例化时赋值
        Person2 zhangsan = new Person2();
         = "张三";
        zhangsan.sex = "男";
        Console.WriteLine("name={0},sex={1}",,zhangsan.sex);
    }
}
class Person
{
    //解决方法2:在基类中创建一个默认无参构造函数
    public Person()
    {

    }
    public Person(int age, string name)
    {

    }
}
class Student : Person
{
    public Student()
    {

    }
    //解决方法1,在构建一个有参的构造函数(和基类构造函数签名一样)
    public Student(int age1, string name1) : base(age1, name1)
    {

    }
}

struct Person2
{
    //public Person2()  //Error!结构中默认无参构造函数是系统默认隐式调用,而且,不能自己显式的写出来
    // {

    // }
    public Person2(string sex1, string name1)
    {
        sex = sex1;        // 结构的字段赋值方式有两种。1-在有参构造函数中赋值(实例化时传参数)
        name = name1;
    }

    //public int age = 10;         // Error! 结构中不能直接给字段赋值
    //public int height = 165;

    public string sex;         // 结构的字段赋值方式有两种。
    public string name;
}